)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"04abf0baf0090f8f1227db2f7556608adf2f7858","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-01-03 11:55:36 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added backend driver for Zadara Storage VPSA."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I0ae4b1e6259c36503114ed40999c5ea4a6be4c5f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_5fd5c5b6","line":8,"updated":"2016-01-04 16:20:12.000000000","message":"This needs a DocImpact tag.","commit_id":"bdf11de8fb4c158aa2f3ee274a2f696eaa14c05c"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"92b6d728d76da14e147cc152ae5808ed9976f913","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-01-03 11:55:36 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added backend driver for Zadara Storage VPSA."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I0ae4b1e6259c36503114ed40999c5ea4a6be4c5f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_5fece58e","line":8,"updated":"2016-01-04 16:23:21.000000000","message":"This patch needs a blueprint. Along with that adding some more info about this patch would be helpful.","commit_id":"bdf11de8fb4c158aa2f3ee274a2f696eaa14c05c"}],"cinder/exception.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9345b0c26b0730bdb463bce32dbaad3c34346408","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"    message \u003d _(\"Backend reports: item not found\")"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"# ZADARA STORAGE VPSA driver exception"},{"line_number":1013,"context_line":"class BadHTTPResponseStatus(CinderException):"},{"line_number":1014,"context_line":"    message \u003d _(\"Bad HTTP response status %(status)s\")"},{"line_number":1015,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_78644b21","line":1012,"updated":"2016-04-26 14:45:58.000000000","message":"These should inherit from VolumeDriverException rather than API exceptions and CinderException.","commit_id":"ebd24f42e79c6ce098f095beb2492e23a2e0c397"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"534ee3645b5ba9c6d50341b6b545e75686821f03","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class ConvertedException(webob.exc.WSGIHTTPException):"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def __init__(self, code\u003d500, title\u003d\"\", explanation\u003d\"\"):"},{"line_number":53,"context_line":"        self.code \u003d code"},{"line_number":54,"context_line":"        # There is a strict rule about constructing status line for HTTP:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_d407f515","line":51,"updated":"2016-04-28 10:50:43.000000000","message":"no need for this space.","commit_id":"05d9a0c9c763aeb449201d98328a0a4ae8822dba"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"534ee3645b5ba9c6d50341b6b545e75686821f03","unresolved":false,"context_lines":[{"line_number":243,"context_line":"class InvalidUUID(Invalid):"},{"line_number":244,"context_line":"    message \u003d _(\"Expected a uuid but received %(uuid)s.\")"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"class APIException(CinderException):"},{"line_number":248,"context_line":"    message \u003d _(\"Error while requesting %(service)s API.\")"},{"line_number":249,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_7479c192","line":246,"updated":"2016-04-28 10:50:43.000000000","message":"why these exceptions are removed? \n(I guess this happened during rebase)\n\nThese are existing exceptions and required one.\nPlease dont remove these..\n\n(tests would be failing)","commit_id":"05d9a0c9c763aeb449201d98328a0a4ae8822dba"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"191f9a49b900a6bcaafdb5b88554dbe88150a783","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"class MessageNotFound(NotFound):"},{"line_number":290,"context_line":"    message \u003d _(\"Message %(message_id)s could not be found.\")"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"class VolumeAttachmentNotFound(NotFound):"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_9f078c1c","line":290,"range":{"start_line":290,"start_character":0,"end_line":290,"end_character":61},"updated":"2016-05-15 07:01:33.000000000","message":"I\u0027m confused why this is showing up in this patch. Rebase issue?","commit_id":"ac378e9ccd0215fbe8601811323c834707a29a10"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"191f9a49b900a6bcaafdb5b88554dbe88150a783","unresolved":false,"context_lines":[{"line_number":536,"context_line":"    message \u003d _(\"Maximum number of backups allowed (%(allowed)d) exceeded\")"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"class ImageLimitExceeded(QuotaError):"},{"line_number":540,"context_line":"    message \u003d _(\"Image quota exceeded\")"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_ff06981e","line":539,"range":{"start_line":539,"start_character":0,"end_line":539,"end_character":37},"updated":"2016-05-15 07:01:33.000000000","message":"As above","commit_id":"ac378e9ccd0215fbe8601811323c834707a29a10"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"    message \u003d _(\"Backend reports: item not found\")"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"# ZADARA STORAGE VPSA driver exception"},{"line_number":1013,"context_line":"class BadHTTPResponseStatus(VolumeDriverException):"},{"line_number":1014,"context_line":"    message \u003d _(\"Bad HTTP response status %(status)s\")"},{"line_number":1015,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_3e562c5c","line":1012,"updated":"2016-07-06 15:45:08.000000000","message":"nit: move this comment done, BadHTTPResponseStatus is a generic exception and can be re-used.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"    message \u003d _(\"Backend reports: item not found\")"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"# ZADARA STORAGE VPSA driver exception"},{"line_number":1013,"context_line":"class BadHTTPResponseStatus(VolumeDriverException):"},{"line_number":1014,"context_line":"    message \u003d _(\"Bad HTTP response status %(status)s\")"},{"line_number":1015,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_5fae80e6","line":1012,"in_reply_to":"1aa78d24_3e562c5c","updated":"2016-07-06 21:35:47.000000000","message":"Done","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"4174ba112c251273f3e639397abce3af05bdd904","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"    message \u003d _(\"Backend reports: item not found\")"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"# ZADARA STORAGE VPSA driver exception"},{"line_number":1013,"context_line":"class BadHTTPResponseStatus(VolumeDriverException):"},{"line_number":1014,"context_line":"    message \u003d _(\"Bad HTTP response status %(status)s\")"},{"line_number":1015,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_19118a04","line":1012,"updated":"2016-07-07 15:14:22.000000000","message":"nit: Please move this comment down.","commit_id":"05ff09fb6c02b129607fc33d5f464eaff41ff0c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eedbea9219c1f45f65ac6c2fbd0189e36e2cf546","unresolved":false,"context_lines":[{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"# Kaminario K2"},{"line_number":1182,"context_line":"class KaminarioCinderDriverException(VolumeDriverException):"},{"line_number":1183,"context_line":"    message \u003d _(\"KaminarioCinderDriver failure: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"1aa78d24_12be4eff","line":1183,"updated":"2016-07-08 12:36:57.000000000","message":"Why is this shown up as added by your patch?  It\u0027s already in master:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/exception.py#L1153","commit_id":"b20e9a5e506ff057807c18558470d983b7de6702"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fc824871721741c74d3067a35a737748d610d41b","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"    message \u003d _(\"Backend reports: item not found\")"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"# ZADARA STORAGE VPSA driver exception"},{"line_number":1013,"context_line":"class BadHTTPResponseStatus(VolumeDriverException):"},{"line_number":1014,"context_line":"    message \u003d _(\"Bad HTTP response status %(status)s\")"},{"line_number":1015,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_1b02d53e","line":1012,"updated":"2016-07-08 18:14:03.000000000","message":"nit: Move the above comment down, just above ZadaraServerCreateFailure, because BadHTTPResponseStatus is not Zadara specific.","commit_id":"cab0bb2ccf69f18ea286fff66b6033e378190af9"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"1b4faa86200738e7c7b45ed2c063bdf6954024dd","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"    message \u003d _(\"Backend reports: item not found\")"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"# ZADARA STORAGE VPSA driver exception"},{"line_number":1013,"context_line":"class BadHTTPResponseStatus(VolumeDriverException):"},{"line_number":1014,"context_line":"    message \u003d _(\"Bad HTTP response status %(status)s\")"},{"line_number":1015,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_16962c94","line":1012,"in_reply_to":"1aa78d24_1b02d53e","updated":"2016-07-08 18:31:23.000000000","message":"Done","commit_id":"cab0bb2ccf69f18ea286fff66b6033e378190af9"}],"cinder/tests/unit/test_zadara.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 Zadara Storage, Inc."},{"line_number":2,"context_line":"# Copyright (c) 2016 OpenStack Foundation"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_7df59b81","line":2,"updated":"2016-01-18 19:27:30.000000000","message":"Please don\u0027t add the OpenStack Foundation unless part of this work was done by an actual employee of the foundation.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder import test"},{"line_number":26,"context_line":"from cinder.volume import configuration as conf"},{"line_number":27,"context_line":"from cinder.volume.drivers.zadara import zadara_opts"},{"line_number":28,"context_line":"from cinder.volume.drivers.zadara import ZadaraVPSAISCSIDriver"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"DEFAULT_RUNTIME_VARS \u003d {"},{"line_number":31,"context_line":"    \u0027status\u0027: 200,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_9d340f4b","line":28,"updated":"2016-01-18 19:27:30.000000000","message":"Import modules, not individual classes.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        connector \u003d dict(initiator\u003d\u0027test_iqn.1\u0027)"},{"line_number":544,"context_line":"        self.driver.create_volume(volume)"},{"line_number":545,"context_line":"        props \u003d self.driver.initialize_connection(volume, connector)"},{"line_number":546,"context_line":"        self.assertEqual(props[\u0027driver_volume_type\u0027], \u0027iscsi\u0027)"},{"line_number":547,"context_line":"        data \u003d props[\u0027data\u0027]"},{"line_number":548,"context_line":"        self.assertEqual(data[\u0027target_portal\u0027], \u00271.1.1.1:3260\u0027)"},{"line_number":549,"context_line":"        self.assertEqual(data[\u0027target_iqn\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_fdcbcb1c","line":546,"range":{"start_line":546,"start_character":54,"end_line":546,"end_character":61},"updated":"2016-01-18 19:27:30.000000000","message":"All of these assertEqual calls should have the arguments in the order of (EXPECTED_VALUE, ACTUAL_VALUE).","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"833712145fad800af2ac867f2b7c5e080e713b3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 Zadara Storage, Inc."},{"line_number":2,"context_line":"# Copyright (c) 2016 OpenStack Foundation"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_afe4e40c","line":2,"updated":"2016-05-04 23:16:02.000000000","message":"Sean asked about this on an earlier review, should this actually have OpenStack Foundation on it?","commit_id":"3a95d52b2771c678e25d7e8f8db3470d2c3645e4"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"833712145fad800af2ac867f2b7c5e080e713b3a","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        self.configuration.zadara_vpsa_use_ssl \u003d False"},{"line_number":486,"context_line":"        self.configuration.zadara_default_snap_policy \u003d False"},{"line_number":487,"context_line":"        self.driver \u003d ZadaraVPSAISCSIDriver(configuration\u003dself.configuration)"},{"line_number":488,"context_line":"        self.stubs.Set(http_client, \u0027HTTPConnection\u0027, FakeHTTPConnection)"},{"line_number":489,"context_line":"        self.stubs.Set(http_client, \u0027HTTPSConnection\u0027, FakeHTTPSConnection)"},{"line_number":490,"context_line":"        self.driver.do_setup(None)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    def test_create_destroy(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a122d0e_4fe9d019","line":489,"range":{"start_line":488,"start_character":8,"end_line":489,"end_character":75},"updated":"2016-05-04 23:16:02.000000000","message":"In general we\u0027ve pushed for using mock instead of stubs in tests moving forward. Not a big deal though IMO, others may disagree ;)","commit_id":"3a95d52b2771c678e25d7e8f8db3470d2c3645e4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Tests for Zadara VPSA volume driver"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"import copy"},{"line_number":19,"context_line":"from six.moves import http_client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_138863c4","line":19,"updated":"2016-05-22 20:29:59.000000000","message":"six is actually a third party library, so it should be in the section below right after mock.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Tests for Zadara VPSA volume driver"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"import copy"},{"line_number":19,"context_line":"from six.moves import http_client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_3050f631","line":19,"in_reply_to":"bab6814e_138863c4","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder import test"},{"line_number":25,"context_line":"from cinder.volume import configuration as conf"},{"line_number":26,"context_line":"from cinder.volume.drivers.zadara import zadara_opts"},{"line_number":27,"context_line":"from cinder.volume.drivers.zadara import ZadaraVPSAISCSIDriver"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"DEFAULT_RUNTIME_VARS \u003d {"},{"line_number":30,"context_line":"    \u0027status\u0027: 200,"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_7393affa","line":27,"updated":"2016-05-22 20:29:59.000000000","message":"Don\u0027t import classes directly.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder import test"},{"line_number":25,"context_line":"from cinder.volume import configuration as conf"},{"line_number":26,"context_line":"from cinder.volume.drivers.zadara import zadara_opts"},{"line_number":27,"context_line":"from cinder.volume.drivers.zadara import ZadaraVPSAISCSIDriver"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"DEFAULT_RUNTIME_VARS \u003d {"},{"line_number":30,"context_line":"    \u0027status\u0027: 200,"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_501bfa80","line":27,"in_reply_to":"bab6814e_7393affa","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            return RUNTIME_VARS[\u0027bad_login\u0027]"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _incorrect_access_key(self, params):"},{"line_number":153,"context_line":"        if params[\u0027access_key\u0027] !\u003d RUNTIME_VARS[\u0027access_key\u0027]:"},{"line_number":154,"context_line":"            return True"},{"line_number":155,"context_line":"        else:"},{"line_number":156,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_538e6bd0","line":153,"updated":"2016-05-22 20:29:59.000000000","message":"Could be simplified to just \"return params... !\u003d RUNTIME...\"","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            return RUNTIME_VARS[\u0027bad_login\u0027]"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _incorrect_access_key(self, params):"},{"line_number":153,"context_line":"        if params[\u0027access_key\u0027] !\u003d RUNTIME_VARS[\u0027access_key\u0027]:"},{"line_number":154,"context_line":"            return True"},{"line_number":155,"context_line":"        else:"},{"line_number":156,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_131dfc65","line":153,"in_reply_to":"bab6814e_538e6bd0","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"af5d36d0c9d0c866dec5d9f330cde57d2f786cc9","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                return False"},{"line_number":127,"context_line":"        return True"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _get_parameters(self, data):"},{"line_number":130,"context_line":"        items \u003d data.split(\u0027\u0026\u0027)"},{"line_number":131,"context_line":"        params \u003d {}"},{"line_number":132,"context_line":"        for item in items:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_21602d35","line":129,"updated":"2016-06-10 13:04:53.000000000","message":"Can we re-use https://docs.python.org/3/library/urllib.parse.html here?","commit_id":"11b6ae49371cc0b5150f08f3d720186f983f1d94"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"af5d36d0c9d0c866dec5d9f330cde57d2f786cc9","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        return params"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def _get_counter(self):"},{"line_number":139,"context_line":"        cnt \u003d RUNTIME_VARS[\u0027counter\u0027]"},{"line_number":140,"context_line":"        RUNTIME_VARS[\u0027counter\u0027] +\u003d 1"},{"line_number":141,"context_line":"        return cnt"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_e1fc6540","line":139,"updated":"2016-06-10 13:04:53.000000000","message":"Please, don\u0027t change global variables. It makes debugging very hard.\nThe same comment for the code below","commit_id":"11b6ae49371cc0b5150f08f3d720186f983f1d94"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"e206f2cb9f77d26be5961e0888f0cd62196c26c2","unresolved":false,"context_lines":[{"line_number":530,"context_line":"    @mock.patch.object(http_client, \u0027HTTPSConnection\u0027, FakeHTTPSConnection)"},{"line_number":531,"context_line":"    def test_volume_attach_detach(self):"},{"line_number":532,"context_line":"        \"\"\"Test volume attachment and detach.\"\"\""},{"line_number":533,"context_line":"        volume \u003d {\u0027name\u0027: \u0027test_volume_01\u0027, \u0027size\u0027: 1, \u0027id\u0027: 123}"},{"line_number":534,"context_line":"        connector \u003d dict(initiator\u003d\u0027test_iqn.1\u0027)"},{"line_number":535,"context_line":"        self.driver.create_volume(volume)"},{"line_number":536,"context_line":"        props \u003d self.driver.initialize_connection(volume, connector)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9abb7d3a_0d8e692d","line":533,"range":{"start_line":533,"start_character":55,"end_line":533,"end_character":64},"updated":"2016-06-01 19:59:33.000000000","message":"Consider using fake.VOLUME_ID here from fake_constants.","commit_id":"11b6ae49371cc0b5150f08f3d720186f983f1d94"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9e46c0878113f254216eee842be399b5053152b9","unresolved":false,"context_lines":[{"line_number":466,"context_line":"    def setUp(self):"},{"line_number":467,"context_line":"        super(ZadaraVPSADriverTestCase, self).setUp()"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        global RUNTIME_VARS"},{"line_number":470,"context_line":"        RUNTIME_VARS \u003d copy.deepcopy(DEFAULT_RUNTIME_VARS)"},{"line_number":471,"context_line":"        self.configuration \u003d mock.Mock(conf.Configuration(None))"},{"line_number":472,"context_line":"        self.configuration.append_config_values(zadara.zadara_opts)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_94c3c656","line":469,"updated":"2016-07-06 14:54:05.000000000","message":"Please move variable definition to the beginning of the file.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"}],"cinder/volume/drivers/zadara.py":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"92b6d728d76da14e147cc152ae5808ed9976f913","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 Zadara Storage, Inc."},{"line_number":2,"context_line":"# Copyright (c) 2012 OpenStack Foundation"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_9fc01de2","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2016-01-04 16:23:21.000000000","message":"Should this be 2016 now?","commit_id":"bdf11de8fb4c158aa2f3ee274a2f696eaa14c05c"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"b874aa10cfdeaed11aab053f56c97ea8ac0eb930","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               default\u003dNone,"},{"line_number":49,"context_line":"               help\u003d\u0027Password for the VPSA\u0027,"},{"line_number":50,"context_line":"               secret\u003dTrue),"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_poolname\u0027,"},{"line_number":53,"context_line":"               default\u003dNone,"},{"line_number":54,"context_line":"               help\u003d\u0027Name of VPSA storage pool for volumes\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_412ed8fb","line":51,"updated":"2016-01-06 19:23:51.000000000","message":"Is there a reason for this blank line?","commit_id":"9d9d6965aed45491a4fd5f0cd9804ece86bee862"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 Zadara Storage, Inc."},{"line_number":2,"context_line":"# Copyright (c) 2016 OpenStack Foundation"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_ddeda78f","line":2,"updated":"2016-01-18 19:27:30.000000000","message":"Remove.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder.i18n import _, _LW"},{"line_number":24,"context_line":"from cinder.volume import driver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import httplib"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from lxml import etree"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_dd628716","line":25,"updated":"2016-01-18 19:27:30.000000000","message":"Import order should be 1) standard libs, 2) third party libs, 3) local imports.\n\nSo this should be changed to have httplib first, an empty line, lxml and oslo libs, an empty line, then cinder imports.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    cfg.StrOpt(\u0027zadara_vol_name_template\u0027,"},{"line_number":61,"context_line":"               default\u003d\u0027OS_%s\u0027,"},{"line_number":62,"context_line":"               help\u003d\u0027Default template for VPSA volume names\u0027),"},{"line_number":63,"context_line":"    cfg.BoolOpt(\u0027zadara_vpsa_auto_detach_on_delete\u0027,"},{"line_number":64,"context_line":"                default\u003dTrue,"},{"line_number":65,"context_line":"                help\u003d\"Automatically detach from servers on volume delete\"),"},{"line_number":66,"context_line":"    cfg.BoolOpt(\u0027zadara_vpsa_allow_nonexistent_delete\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_bd16b353","line":63,"updated":"2016-01-18 19:27:30.000000000","message":"Cinder will not allow deleting a volume if it is attached, so I don\u0027t think you actually need this.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    cfg.BoolOpt(\u0027zadara_vpsa_auto_detach_on_delete\u0027,"},{"line_number":64,"context_line":"                default\u003dTrue,"},{"line_number":65,"context_line":"                help\u003d\"Automatically detach from servers on volume delete\"),"},{"line_number":66,"context_line":"    cfg.BoolOpt(\u0027zadara_vpsa_allow_nonexistent_delete\u0027,"},{"line_number":67,"context_line":"                default\u003dTrue,"},{"line_number":68,"context_line":"                help\u003d\"Don\u0027t halt on deletion of non-existing volumes\"), ]"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_bd48f388","line":66,"updated":"2016-01-18 19:27:30.000000000","message":"I would recommend just removing this option and make it true by default. That is what is done by most other drivers.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                                   % kwargs.get(\u0027cg_name\u0027),"},{"line_number":178,"context_line":"                                   {})}"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        if cmd not in vpsa_commands.keys():"},{"line_number":181,"context_line":"            raise exception.UnknownCmd(cmd\u003dcmd)"},{"line_number":182,"context_line":"        else:"},{"line_number":183,"context_line":"            (method, url, params) \u003d vpsa_commands[cmd]"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_6f3ac2cf","line":180,"range":{"start_line":180,"start_character":36,"end_line":180,"end_character":42},"updated":"2016-01-18 19:27:30.000000000","message":"This performs an unnecessary copy of all of the dict keys to do the check. There probably will never be a significant amount that would cause a problem, but it would be better to just do:\n\nif cmd not in vpsa_commands:\n    raise ...","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        user \u003d xml_tree.find(\u0027user\u0027)"},{"line_number":217,"context_line":"        if user is None:"},{"line_number":218,"context_line":"            raise exception.MalformedResponse(cmd\u003dcmd,"},{"line_number":219,"context_line":"                                              reason\u003d\u0027no \"user\" field\u0027)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        access_key \u003d user.findtext(\u0027access-key\u0027)"},{"line_number":222,"context_line":"        if access_key is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_8f65b6e2","line":219,"updated":"2016-01-18 19:27:30.000000000","message":"Exception strings need to be wrapped in the _() translation marker.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        access_key \u003d user.findtext(\u0027access-key\u0027)"},{"line_number":222,"context_line":"        if access_key is None:"},{"line_number":223,"context_line":"            raise exception.MalformedResponse(cmd\u003dcmd,"},{"line_number":224,"context_line":"                                              reason\u003d\u0027no \"access-key\" field\u0027)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self.access_key \u003d access_key"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_2f628ad9","line":224,"updated":"2016-01-18 19:27:30.000000000","message":"Same.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        vpsa_vol \u003d self._get_vpsa_volume_name(name)"},{"line_number":405,"context_line":"        if not vpsa_vol:"},{"line_number":406,"context_line":"            LOG.warning(_LW(\u0027Volume %s could not be found. \u0027"},{"line_number":407,"context_line":"                        \u0027It might be already deleted\u0027) , name)"},{"line_number":408,"context_line":"            if self.configuration.zadara_vpsa_allow_nonexistent_delete:"},{"line_number":409,"context_line":"                return"},{"line_number":410,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_efcf92b1","line":407,"updated":"2016-01-18 19:27:30.000000000","message":"Shift line right to line up after opening (.\n\nExtra space after string before \", name\".","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        LOG.debug(\u0027Create snapshot: %s\u0027, snapshot[\u0027name\u0027])"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":438,"context_line":"        volume_name \u003d self.configuration.zadara_vol_name_template\\"},{"line_number":439,"context_line":"            % snapshot[\u0027volume_name\u0027]"},{"line_number":440,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":441,"context_line":"        if not cg_name:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_8fc13683","line":438,"range":{"start_line":438,"start_character":65,"end_line":438,"end_character":66},"updated":"2016-01-18 19:27:30.000000000","message":"Please wrap in () to avoid using \\ for line continuation.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            % snapshot[\u0027volume_name\u0027]"},{"line_number":440,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":441,"context_line":"        if not cg_name:"},{"line_number":442,"context_line":"            msg \u003d _(\u0027Volume %(name)s not found\u0027) % {\u0027name\u0027: volume_name}"},{"line_number":443,"context_line":"            LOG.error(msg)"},{"line_number":444,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_8f6ff691","line":442,"range":{"start_line":442,"start_character":12,"end_line":442,"end_character":15},"updated":"2016-01-18 19:27:30.000000000","message":"msg is only used in the LOG statement, so this should use _LE(). Also, don\u0027t do the string formatting up front and move the formatting value dict as an argument to the LOG.error call (i.e. LOG.error(msg, {\u0027name\u0027: volume_name}))","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        LOG.debug(\u0027Delete snapshot: %s\u0027, snapshot[\u0027name\u0027])"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":456,"context_line":"        volume_name \u003d self.configuration.zadara_vol_name_template\\"},{"line_number":457,"context_line":"            % snapshot[\u0027volume_name\u0027]"},{"line_number":458,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":459,"context_line":"        if not cg_name:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_ef0472c7","line":456,"range":{"start_line":456,"start_character":65,"end_line":456,"end_character":66},"updated":"2016-01-18 19:27:30.000000000","message":"() instead of \\","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":459,"context_line":"        if not cg_name:"},{"line_number":460,"context_line":"            # If the volume isn\u0027t present, then don\u0027t attempt to delete"},{"line_number":461,"context_line":"            LOG.warning(_LW(\u0027snapshot: original volume %s not found,\u0027"},{"line_number":462,"context_line":"                        \u0027skipping delete operation\u0027) , snapshot[\u0027volume_name\u0027])"},{"line_number":463,"context_line":"            return True"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_6ff962c8","line":462,"updated":"2016-01-18 19:27:30.000000000","message":"Shift right, get rid of extra space before comma.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        if not snap_id:"},{"line_number":467,"context_line":"            # If the snapshot isn\u0027t present, then don\u0027t attempt to delete"},{"line_number":468,"context_line":"            LOG.warning(_LW(\u0027snapshot: snapshot %s not found,\u0027"},{"line_number":469,"context_line":"                        \u0027skipping delete operation\u0027) , snapshot[\u0027name\u0027])"},{"line_number":470,"context_line":"            return True"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        self.vpsa.send_cmd(\u0027delete_snapshot\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_2f036aba","line":469,"updated":"2016-01-18 19:27:30.000000000","message":"Same.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":476,"context_line":"        \"\"\"Creates a volume from a snapshot.\"\"\""},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        LOG.debug(\u0027Creating volume from snapshot: %s\u0027 % snapshot[\u0027name\u0027])"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":481,"context_line":"        volume_name \u003d self.configuration.zadara_vol_name_template\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_af251a5d","line":478,"range":{"start_line":478,"start_character":53,"end_line":478,"end_character":55},"updated":"2016-01-18 19:27:30.000000000","message":"Replace \" %\" with \",\"","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        LOG.debug(\u0027Creating volume from snapshot: %s\u0027 % snapshot[\u0027name\u0027])"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":481,"context_line":"        volume_name \u003d self.configuration.zadara_vol_name_template\\"},{"line_number":482,"context_line":"            % snapshot[\u0027volume_name\u0027]"},{"line_number":483,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":484,"context_line":"        if not cg_name:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_2f1a8a18","line":481,"range":{"start_line":481,"start_character":65,"end_line":481,"end_character":66},"updated":"2016-01-18 19:27:30.000000000","message":"() instead of ,","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            % snapshot[\u0027volume_name\u0027]"},{"line_number":483,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":484,"context_line":"        if not cg_name:"},{"line_number":485,"context_line":"            msg \u003d _(\u0027Volume %(name)s not found\u0027) % {\u0027name\u0027: volume_name}"},{"line_number":486,"context_line":"            LOG.error(msg)"},{"line_number":487,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_6fe72213","line":485,"updated":"2016-01-18 19:27:30.000000000","message":"_LE() and pass formatting values in to logger.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":490,"context_line":"        if not snap_id:"},{"line_number":491,"context_line":"            msg \u003d _(\u0027Snapshot %(name)s not found\u0027) % {\u0027name\u0027: snapshot[\u0027name\u0027]}"},{"line_number":492,"context_line":"            LOG.error(msg)"},{"line_number":493,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dsnapshot[\u0027name\u0027])"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_8fe4d60d","line":491,"updated":"2016-01-18 19:27:30.000000000","message":"Same.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":501,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":502,"context_line":"        \"\"\"Creates a clone of the specified volume.\"\"\""},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        LOG.debug(\u0027Creating clone of volume: %s\u0027 % src_vref[\u0027name\u0027])"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":507,"context_line":"        volume_name \u003d self.configuration.zadara_vol_name_template\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_0fbf86d1","line":504,"updated":"2016-01-18 19:27:30.000000000","message":"% \u003d\u003e ,","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":508,"context_line":"            % src_vref[\u0027name\u0027]"},{"line_number":509,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":510,"context_line":"        if not cg_name:"},{"line_number":511,"context_line":"            msg \u003d _(\u0027Volume %(name)s not found\u0027) % {\u0027name\u0027: volume_name}"},{"line_number":512,"context_line":"            LOG.error(msg)"},{"line_number":513,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":514,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_cfb88ee8","line":511,"updated":"2016-01-18 19:27:30.000000000","message":"_LE() and pass values to logger.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":524,"context_line":"        (vpsa_vol, size) \u003d self._get_vpsa_volume_name_and_size(name)"},{"line_number":525,"context_line":"        if not vpsa_vol:"},{"line_number":526,"context_line":"            msg \u003d _(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":527,"context_line":"                    \u0027It might be already deleted\u0027) % {\u0027name\u0027: name}"},{"line_number":528,"context_line":"            LOG.error(msg)"},{"line_number":529,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_efa0f2a7","line":526,"updated":"2016-01-18 19:27:30.000000000","message":"Same.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        if new_size \u003c size:"},{"line_number":532,"context_line":"            raise exception.InvalidInput("},{"line_number":533,"context_line":"                reason\u003d\u0027%s \u003c current size %s\u0027 % (new_size, size))"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"        expand_size \u003d new_size - size"},{"line_number":536,"context_line":"        self.vpsa.send_cmd(\u0027expand_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_afaafa83","line":533,"updated":"2016-01-18 19:27:30.000000000","message":"_()","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        if target is None or lun is None:"},{"line_number":594,"context_line":"            raise exception.ZadaraInvalidAttachmentInfo("},{"line_number":595,"context_line":"                name\u003dname,"},{"line_number":596,"context_line":"                reason\u003d\u0027target\u003d%s, lun\u003d%s\u0027 % (target, lun))"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        properties \u003d {}"},{"line_number":599,"context_line":"        properties[\u0027target_discovered\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_ef879210","line":596,"updated":"2016-01-18 19:27:30.000000000","message":"_()","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9345b0c26b0730bdb463bce32dbaad3c34346408","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.BoolOpt(\u0027zadara_use_iser\u0027,"},{"line_number":35,"context_line":"                default\u003dTrue,"},{"line_number":36,"context_line":"                help\u003d\u0027VPSA - Use ISER instead of iSCSI\u0027),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_ip\u0027,"},{"line_number":38,"context_line":"               default\u003dNone,"},{"line_number":39,"context_line":"               help\u003d\u0027VPSA - Management IP\u0027),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_port\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_189a776e","line":37,"updated":"2016-04-26 14:45:58.000000000","message":"Will this not accept a hostname as well as an IP?  If it will, please change this to zadara_vpsa_host.","commit_id":"ebd24f42e79c6ce098f095beb2492e23a2e0c397"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9345b0c26b0730bdb463bce32dbaad3c34346408","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_ip\u0027,"},{"line_number":38,"context_line":"               default\u003dNone,"},{"line_number":39,"context_line":"               help\u003d\u0027VPSA - Management IP\u0027),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_port\u0027,"},{"line_number":41,"context_line":"               default\u003dNone,"},{"line_number":42,"context_line":"               help\u003d\u0027VPSA - Port number\u0027),"},{"line_number":43,"context_line":"    cfg.BoolOpt(\u0027zadara_vpsa_use_ssl\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_98ade79d","line":40,"updated":"2016-04-26 14:45:58.000000000","message":"Should be a cfg.PortOpt.","commit_id":"ebd24f42e79c6ce098f095beb2492e23a2e0c397"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9345b0c26b0730bdb463bce32dbaad3c34346408","unresolved":false,"context_lines":[{"line_number":257,"context_line":"class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):"},{"line_number":258,"context_line":"    \"\"\"Zadara VPSA iSCSI/iSER volume driver.\"\"\""},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    VERSION \u003d \u002715.07N\u0027"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":263,"context_line":"        super(ZadaraVPSAISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_b8570359","line":260,"updated":"2016-04-26 14:45:58.000000000","message":"Drivers in Cinder use major.minor or major.minor.rev version numbers with numeric fields.  This is not a valid version number since it contains an \"N\".","commit_id":"ebd24f42e79c6ce098f095beb2492e23a2e0c397"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9345b0c26b0730bdb463bce32dbaad3c34346408","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        if not snap_id:"},{"line_number":479,"context_line":"            LOG.error(_LE(\u0027Snapshot %(name)s not found\u0027),"},{"line_number":480,"context_line":"                      {\u0027name\u0027: snapshot[\u0027name\u0027]})"},{"line_number":481,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dsnapshot[\u0027name\u0027])"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        self.vpsa.send_cmd(\u0027create_clone_from_snap\u0027,"},{"line_number":484,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_d83d9f2c","line":481,"updated":"2016-04-26 14:45:58.000000000","message":"VolumeNotFound is an API exception for Cinder, this needs to be a VolumeDriverException instead.","commit_id":"ebd24f42e79c6ce098f095beb2492e23a2e0c397"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9345b0c26b0730bdb463bce32dbaad3c34346408","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":498,"context_line":"        if not cg_name:"},{"line_number":499,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":500,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        self.vpsa.send_cmd(\u0027create_clone\u0027,"},{"line_number":503,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_782c4b02","line":500,"updated":"2016-04-26 14:45:58.000000000","message":"VolumeNotFound is an API exception for Cinder, this needs to be a VolumeDriverException instead.","commit_id":"ebd24f42e79c6ce098f095beb2492e23a2e0c397"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9345b0c26b0730bdb463bce32dbaad3c34346408","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        if not vpsa_vol:"},{"line_number":513,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":514,"context_line":"                          \u0027It might be already deleted\u0027), {\u0027name\u0027: name})"},{"line_number":515,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        if new_size \u003c size:"},{"line_number":518,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_b832635c","line":515,"updated":"2016-04-26 14:45:58.000000000","message":"Same as above.","commit_id":"ebd24f42e79c6ce098f095beb2492e23a2e0c397"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9345b0c26b0730bdb463bce32dbaad3c34346408","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":557,"context_line":"        vpsa_vol \u003d self._get_vpsa_volume_name(name)"},{"line_number":558,"context_line":"        if not vpsa_vol:"},{"line_number":559,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"        # Get Active controller details"},{"line_number":562,"context_line":"        ctrl \u003d self._get_active_controller_details()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_384773bd","line":559,"updated":"2016-04-26 14:45:58.000000000","message":"Same as above.","commit_id":"ebd24f42e79c6ce098f095beb2492e23a2e0c397"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9345b0c26b0730bdb463bce32dbaad3c34346408","unresolved":false,"context_lines":[{"line_number":615,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":616,"context_line":"        vpsa_vol \u003d self._get_vpsa_volume_name(name)"},{"line_number":617,"context_line":"        if not vpsa_vol:"},{"line_number":618,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        # Detach volume from server"},{"line_number":621,"context_line":"        self.vpsa.send_cmd(\u0027detach_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_58186fd3","line":618,"updated":"2016-04-26 14:45:58.000000000","message":"Same as above.","commit_id":"ebd24f42e79c6ce098f095beb2492e23a2e0c397"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"191f9a49b900a6bcaafdb5b88554dbe88150a783","unresolved":false,"context_lines":[{"line_number":258,"context_line":"class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):"},{"line_number":259,"context_line":"    \"\"\"Zadara VPSA iSCSI/iSER volume driver.\"\"\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    VERSION \u003d \u002715.07\u0027"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":264,"context_line":"        super(ZadaraVPSAISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_72093f2c","line":261,"range":{"start_line":261,"start_character":0,"end_line":261,"end_character":21},"updated":"2016-05-15 07:01:33.000000000","message":"Many drivers are keeping some version history here as a comment - this might be a good pattern to adopt.","commit_id":"ac378e9ccd0215fbe8601811323c834707a29a10"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":18,"context_line":"This driver requires VPSA with API version 15.07 or higher."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from six.moves import http_client"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from lxml import etree"},{"line_number":24,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_93c293e7","line":21,"updated":"2016-05-22 20:29:59.000000000","message":"Move six below with lxml and oslo imports.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":18,"context_line":"This driver requires VPSA with API version 15.07 or higher."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from six.moves import http_client"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from lxml import etree"},{"line_number":24,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_13be9cfe","line":21,"in_reply_to":"bab6814e_93c293e7","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                      {\u0027name\u0027: pool_name, \u0027total\u0027: total, \u0027free\u0027: free})"},{"line_number":353,"context_line":"            return (total, free)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        return (\u0027infinite\u0027, \u0027infinite\u0027)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def _get_active_controller_details(self):"},{"line_number":358,"context_line":"        \"\"\"Return details of VPSA\u0027s active controller.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_13afc32a","line":355,"updated":"2016-05-22 20:29:59.000000000","message":"If possible, it\u0027s better to at least return an optimistic estimation of the capacity rather than \u0027infinite\u0027. With this, the schedule will place this driver at the bottom of the list for selection, even if there are other backends with less reported space.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                      {\u0027name\u0027: pool_name, \u0027total\u0027: total, \u0027free\u0027: free})"},{"line_number":353,"context_line":"            return (total, free)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        return (\u0027infinite\u0027, \u0027infinite\u0027)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def _get_active_controller_details(self):"},{"line_number":358,"context_line":"        \"\"\"Return details of VPSA\u0027s active controller.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_d3fb7477","line":355,"in_reply_to":"bab6814e_13afc32a","updated":"2016-05-23 12:28:41.000000000","message":"\"infinite\" will be returned only in case the \"real\" capacity cannot be determined, so I guess, it make sense to be shifted to the bottom of the list.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":448,"context_line":"        if not cg_name:"},{"line_number":449,"context_line":"            # If the volume isn\u0027t present, then don\u0027t attempt to delete"},{"line_number":450,"context_line":"            LOG.warning(_LW(\u0027snapshot: original volume %s not found,\u0027"},{"line_number":451,"context_line":"                            \u0027skipping delete operation\u0027),"},{"line_number":452,"context_line":"                        snapshot[\u0027volume_name\u0027])"},{"line_number":453,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_73aa8f1a","line":450,"updated":"2016-05-22 20:29:59.000000000","message":"Need trailing space so the two strings don\u0027t run together.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":448,"context_line":"        if not cg_name:"},{"line_number":449,"context_line":"            # If the volume isn\u0027t present, then don\u0027t attempt to delete"},{"line_number":450,"context_line":"            LOG.warning(_LW(\u0027snapshot: original volume %s not found,\u0027"},{"line_number":451,"context_line":"                            \u0027skipping delete operation\u0027),"},{"line_number":452,"context_line":"                        snapshot[\u0027volume_name\u0027])"},{"line_number":453,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_5315c499","line":450,"in_reply_to":"bab6814e_73aa8f1a","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":456,"context_line":"        if not snap_id:"},{"line_number":457,"context_line":"            # If the snapshot isn\u0027t present, then don\u0027t attempt to delete"},{"line_number":458,"context_line":"            LOG.warning(_LW(\u0027snapshot: snapshot %s not found,\u0027"},{"line_number":459,"context_line":"                            \u0027skipping delete operation\u0027), snapshot[\u0027name\u0027])"},{"line_number":460,"context_line":"            return True"},{"line_number":461,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_53a5cb44","line":458,"updated":"2016-05-22 20:29:59.000000000","message":"Need trailing space.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":456,"context_line":"        if not snap_id:"},{"line_number":457,"context_line":"            # If the snapshot isn\u0027t present, then don\u0027t attempt to delete"},{"line_number":458,"context_line":"            LOG.warning(_LW(\u0027snapshot: snapshot %s not found,\u0027"},{"line_number":459,"context_line":"                            \u0027skipping delete operation\u0027), snapshot[\u0027name\u0027])"},{"line_number":460,"context_line":"            return True"},{"line_number":461,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_730e088d","line":458,"in_reply_to":"bab6814e_53a5cb44","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                      {\u0027name\u0027: snapshot[\u0027name\u0027]})"},{"line_number":482,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dsnapshot[\u0027name\u0027])"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        self.vpsa.send_cmd(\u0027create_clone_from_snap\u0027,"},{"line_number":485,"context_line":"                           cg_name\u003dcg_name,"},{"line_number":486,"context_line":"                           name\u003dself.configuration.zadara_vol_name_template"},{"line_number":487,"context_line":"                           % volume[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_1376a3d6","line":484,"updated":"2016-05-22 20:29:59.000000000","message":"It\u0027s possible the new volume is requested to be a larger size than the snapshot. Need to check the volume[\u0027size\u0027] to see if it needs to be larger.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":481,"context_line":"                      {\u0027name\u0027: snapshot[\u0027name\u0027]})"},{"line_number":482,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dsnapshot[\u0027name\u0027])"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        self.vpsa.send_cmd(\u0027create_clone_from_snap\u0027,"},{"line_number":485,"context_line":"                           cg_name\u003dcg_name,"},{"line_number":486,"context_line":"                           name\u003dself.configuration.zadara_vol_name_template"},{"line_number":487,"context_line":"                           % volume[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_472cdb98","line":484,"in_reply_to":"bab6814e_1376a3d6","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        LOG.debug(\u0027Creating clone of volume: %s\u0027, src_vref[\u0027name\u0027])"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":496,"context_line":"        volume_name \u003d self.configuration.zadara_vol_name_template\\"},{"line_number":497,"context_line":"            % src_vref[\u0027name\u0027]"},{"line_number":498,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":499,"context_line":"        if not cg_name:"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_9369f3fb","line":496,"updated":"2016-05-22 20:29:59.000000000","message":"Wrap in () to avoid use of \\ for line continuation.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        LOG.debug(\u0027Creating clone of volume: %s\u0027, src_vref[\u0027name\u0027])"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":496,"context_line":"        volume_name \u003d self.configuration.zadara_vol_name_template\\"},{"line_number":497,"context_line":"            % src_vref[\u0027name\u0027]"},{"line_number":498,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":499,"context_line":"        if not cg_name:"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_738568cd","line":496,"in_reply_to":"bab6814e_9369f3fb","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":500,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":501,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dvolume_name)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        self.vpsa.send_cmd(\u0027create_clone\u0027,"},{"line_number":504,"context_line":"                           cg_name\u003dcg_name,"},{"line_number":505,"context_line":"                           name\u003dself.configuration.zadara_vol_name_template"},{"line_number":506,"context_line":"                           % volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_d36ffbf9","line":503,"updated":"2016-05-22 20:29:59.000000000","message":"It\u0027s possible the user requested the cloned volume to be larger than the original source. Need to check the volume size and make sure the new volume is that size, either by extending or if supported by performing the clone operation to the new size immediately.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":500,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":501,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dvolume_name)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        self.vpsa.send_cmd(\u0027create_clone\u0027,"},{"line_number":504,"context_line":"                           cg_name\u003dcg_name,"},{"line_number":505,"context_line":"                           name\u003dself.configuration.zadara_vol_name_template"},{"line_number":506,"context_line":"                           % volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_6750ff0b","line":503,"in_reply_to":"bab6814e_d36ffbf9","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"410fbf06ccf745f8b20afac1c7e0e4b0c54af14e","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self.ensure_connection(cmd)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        (method, url, body) \u003d self._generate_vpsa_cmd(cmd, **kwargs)"},{"line_number":228,"context_line":"        LOG.debug(\u0027Sending %(method)s to %(url)s. Body \"%(body)s\"\u0027,"},{"line_number":229,"context_line":"                  {\u0027method\u0027: method, \u0027url\u0027: url, \u0027body\u0027: body})"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        if self.conf.zadara_vpsa_use_ssl:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9abb7d3a_ebb24c93","line":228,"updated":"2016-05-31 11:39:06.000000000","message":"I notice from the logs that some of these log messages are including password in plain text. You might want to change how that is done as permissions to read the log files are usually open unlike cinder.conf.","commit_id":"11b6ae49371cc0b5150f08f3d720186f983f1d94"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"af5d36d0c9d0c866dec5d9f330cde57d2f786cc9","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self.ensure_connection(cmd)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        (method, url, body) \u003d self._generate_vpsa_cmd(cmd, **kwargs)"},{"line_number":228,"context_line":"        LOG.debug(\u0027Sending %(method)s to %(url)s. Body \"%(body)s\"\u0027,"},{"line_number":229,"context_line":"                  {\u0027method\u0027: method, \u0027url\u0027: url, \u0027body\u0027: body})"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        if self.conf.zadara_vpsa_use_ssl:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_1c747a9a","line":228,"in_reply_to":"9abb7d3a_ebb24c93","updated":"2016-06-10 13:04:53.000000000","message":"IMO, it\u0027s a security issue which should be fixed","commit_id":"11b6ae49371cc0b5150f08f3d720186f983f1d94"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"af5d36d0c9d0c866dec5d9f330cde57d2f786cc9","unresolved":false,"context_lines":[{"line_number":257,"context_line":"class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):"},{"line_number":258,"context_line":"    \"\"\"Zadara VPSA iSCSI/iSER volume driver.\"\"\""},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    VERSION \u003d \u002715.07\u0027"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":263,"context_line":"        super(ZadaraVPSAISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_9c686abc","line":260,"updated":"2016-06-10 13:04:53.000000000","message":"Why not \u00271.0\u0027? It\u0027s a first version in Cinder","commit_id":"11b6ae49371cc0b5150f08f3d720186f983f1d94"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"e206f2cb9f77d26be5961e0888f0cd62196c26c2","unresolved":false,"context_lines":[{"line_number":402,"context_line":"                            \u0027It might be already deleted\u0027), name)"},{"line_number":403,"context_line":"            return"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        # Check attachment info and detach from all"},{"line_number":406,"context_line":"        xml_tree \u003d self.vpsa.send_cmd(\u0027list_vol_attachments\u0027,"},{"line_number":407,"context_line":"                                      vpsa_vol\u003dvpsa_vol)"},{"line_number":408,"context_line":"        servers \u003d self._xml_parse_helper(xml_tree, \u0027servers\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9abb7d3a_272eeefa","line":405,"range":{"start_line":405,"start_character":8,"end_line":405,"end_character":51},"updated":"2016-06-01 19:59:33.000000000","message":"API won\u0027t let you delete a volume if it attached, I think you don\u0027t need to check this.","commit_id":"11b6ae49371cc0b5150f08f3d720186f983f1d94"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"e206f2cb9f77d26be5961e0888f0cd62196c26c2","unresolved":false,"context_lines":[{"line_number":520,"context_line":"                          \u0027It might be already deleted\u0027), {\u0027name\u0027: name})"},{"line_number":521,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dname)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        if new_size \u003c size:"},{"line_number":524,"context_line":"            raise exception.InvalidInput("},{"line_number":525,"context_line":"                reason\u003d_(\u0027%(new_size)s \u003c current size %(size)s\u0027) %"},{"line_number":526,"context_line":"                {\u0027new_size\u0027: new_size, \u0027size\u0027: size})"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        expand_size \u003d new_size - size"},{"line_number":529,"context_line":"        self.vpsa.send_cmd(\u0027expand_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9abb7d3a_3c7e016a","line":526,"range":{"start_line":523,"start_character":7,"end_line":526,"end_character":53},"updated":"2016-06-01 19:59:33.000000000","message":"I think it is tested by API.","commit_id":"11b6ae49371cc0b5150f08f3d720186f983f1d94"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                default\u003dTrue,"},{"line_number":36,"context_line":"                help\u003d\u0027VPSA - Use ISER instead of iSCSI\u0027),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_host\u0027,"},{"line_number":38,"context_line":"               default\u003dNone,"},{"line_number":39,"context_line":"               help\u003d\u0027VPSA - Management Host name or IP address\u0027),"},{"line_number":40,"context_line":"    cfg.PortOpt(\u0027zadara_vpsa_port\u0027,"},{"line_number":41,"context_line":"                default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_5c840d0a","line":38,"range":{"start_line":38,"start_character":15,"end_line":38,"end_character":27},"updated":"2016-06-29 12:42:10.000000000","message":"No need to set default\u003dNone.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                default\u003dTrue,"},{"line_number":36,"context_line":"                help\u003d\u0027VPSA - Use ISER instead of iSCSI\u0027),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_host\u0027,"},{"line_number":38,"context_line":"               default\u003dNone,"},{"line_number":39,"context_line":"               help\u003d\u0027VPSA - Management Host name or IP address\u0027),"},{"line_number":40,"context_line":"    cfg.PortOpt(\u0027zadara_vpsa_port\u0027,"},{"line_number":41,"context_line":"                default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_a32e7389","line":38,"range":{"start_line":38,"start_character":15,"end_line":38,"end_character":27},"in_reply_to":"3aaa91ec_5c840d0a","updated":"2016-06-30 15:17:46.000000000","message":"Per my discussion with smcginnis , mind : \nhttps://review.openstack.org/#/c/334811/","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":260,"context_line":"class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):"},{"line_number":261,"context_line":"    \"\"\"Zadara VPSA iSCSI/iSER volume driver.\"\"\""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    VERSION \u003d \u002715.07\u0027"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":266,"context_line":"        super(ZadaraVPSAISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_3c7ae1f1","line":263,"updated":"2016-06-29 12:42:10.000000000","message":"This is the first version of the driver, why 15.07?","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":260,"context_line":"class ZadaraVPSAISCSIDriver(driver.ISCSIDriver):"},{"line_number":261,"context_line":"    \"\"\"Zadara VPSA iSCSI/iSER volume driver.\"\"\""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    VERSION \u003d \u002715.07\u0027"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":266,"context_line":"        super(ZadaraVPSAISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_230ba325","line":263,"in_reply_to":"3aaa91ec_3c7ae1f1","updated":"2016-06-30 15:17:46.000000000","message":"Actually, that\u0027s not the first version in Cinder, we had presence in Juno; anyways - this is Zadara\u0027s versioning - corresponding to our software version.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                                      (\u0027name\u0027, pool_name))"},{"line_number":350,"context_line":"        if pool is not None:"},{"line_number":351,"context_line":"            total \u003d int(pool.findtext(\u0027capacity\u0027))"},{"line_number":352,"context_line":"            free \u003d int(float(pool.findtext(\u0027available-capacity\u0027)))"},{"line_number":353,"context_line":"            LOG.debug(\u0027Pool %(name)s: %(total)sGB total, %(free)sGB free\u0027,"},{"line_number":354,"context_line":"                      {\u0027name\u0027: pool_name, \u0027total\u0027: total, \u0027free\u0027: free})"},{"line_number":355,"context_line":"            return (total, free)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_9c003536","line":352,"range":{"start_line":352,"start_character":23,"end_line":352,"end_character":28},"updated":"2016-06-29 12:42:10.000000000","message":"Do we need float in line 351?","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                                      (\u0027name\u0027, pool_name))"},{"line_number":350,"context_line":"        if pool is not None:"},{"line_number":351,"context_line":"            total \u003d int(pool.findtext(\u0027capacity\u0027))"},{"line_number":352,"context_line":"            free \u003d int(float(pool.findtext(\u0027available-capacity\u0027)))"},{"line_number":353,"context_line":"            LOG.debug(\u0027Pool %(name)s: %(total)sGB total, %(free)sGB free\u0027,"},{"line_number":354,"context_line":"                      {\u0027name\u0027: pool_name, \u0027total\u0027: total, \u0027free\u0027: free})"},{"line_number":355,"context_line":"            return (total, free)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_c8bbde0d","line":352,"range":{"start_line":352,"start_character":23,"end_line":352,"end_character":28},"in_reply_to":"3aaa91ec_9c003536","updated":"2016-06-30 15:17:46.000000000","message":"No, by design pool capacity will return as integer while available capacity will return as floating.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":433,"context_line":"        if not cg_name:"},{"line_number":434,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":435,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dvolume_name)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        self.vpsa.send_cmd(\u0027create_snapshot\u0027,"},{"line_number":438,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_3fde5311","line":435,"updated":"2016-06-29 12:42:10.000000000","message":"-1: This would print:\n\n Volume driver reported an error: None\n\nInstead of volume_id, you may need to pass message kwarg or use a sub-class of NotFound.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":433,"context_line":"        if not cg_name:"},{"line_number":434,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":435,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dvolume_name)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        self.vpsa.send_cmd(\u0027create_snapshot\u0027,"},{"line_number":438,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_95d9f8f5","line":435,"in_reply_to":"3aaa91ec_3fde5311","updated":"2016-06-30 15:17:46.000000000","message":"Done","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            # If the volume isn\u0027t present, then don\u0027t attempt to delete"},{"line_number":452,"context_line":"            LOG.warning(_LW(\u0027snapshot: original volume %s not found, \u0027"},{"line_number":453,"context_line":"                            \u0027skipping delete operation\u0027),"},{"line_number":454,"context_line":"                        snapshot[\u0027volume_name\u0027])"},{"line_number":455,"context_line":"            return True"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_dfdf4fd4","line":454,"range":{"start_line":454,"start_character":23,"end_line":454,"end_character":47},"updated":"2016-06-29 12:42:10.000000000","message":"In other warning messages, the volume name is the custom name using self.configuration.zadara_vol_name_template.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            # If the volume isn\u0027t present, then don\u0027t attempt to delete"},{"line_number":452,"context_line":"            LOG.warning(_LW(\u0027snapshot: original volume %s not found, \u0027"},{"line_number":453,"context_line":"                            \u0027skipping delete operation\u0027),"},{"line_number":454,"context_line":"                        snapshot[\u0027volume_name\u0027])"},{"line_number":455,"context_line":"            return True"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_c8a91792","line":454,"range":{"start_line":454,"start_character":23,"end_line":454,"end_character":47},"in_reply_to":"3aaa91ec_dfdf4fd4","updated":"2016-06-30 15:17:46.000000000","message":"Done","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            LOG.warning(_LW(\u0027snapshot: original volume %s not found, \u0027"},{"line_number":453,"context_line":"                            \u0027skipping delete operation\u0027),"},{"line_number":454,"context_line":"                        snapshot[\u0027volume_name\u0027])"},{"line_number":455,"context_line":"            return True"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":458,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_7f9c5b0e","line":455,"range":{"start_line":455,"start_character":12,"end_line":455,"end_character":23},"updated":"2016-06-29 12:42:10.000000000","message":"I don\u0027t think the return type is boolean for delete_snapshot.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            LOG.warning(_LW(\u0027snapshot: original volume %s not found, \u0027"},{"line_number":453,"context_line":"                            \u0027skipping delete operation\u0027),"},{"line_number":454,"context_line":"                        snapshot[\u0027volume_name\u0027])"},{"line_number":455,"context_line":"            return True"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":458,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_38d11b58","line":455,"range":{"start_line":455,"start_character":12,"end_line":455,"end_character":23},"in_reply_to":"3aaa91ec_7f9c5b0e","updated":"2016-06-30 15:17:46.000000000","message":"Done","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":476,"context_line":"        if not cg_name:"},{"line_number":477,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":478,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dvolume_name)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":481,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_3f4bf388","line":478,"updated":"2016-06-29 12:42:10.000000000","message":"-1: Please pass message or use a different exception.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":476,"context_line":"        if not cg_name:"},{"line_number":477,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":478,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dvolume_name)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":481,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_fbaaed6f","line":478,"in_reply_to":"3aaa91ec_3f4bf388","updated":"2016-06-30 15:17:46.000000000","message":"Done","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        if not snap_id:"},{"line_number":482,"context_line":"            LOG.error(_LE(\u0027Snapshot %(name)s not found\u0027),"},{"line_number":483,"context_line":"                      {\u0027name\u0027: snapshot[\u0027name\u0027]})"},{"line_number":484,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dsnapshot[\u0027name\u0027])"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        self.vpsa.send_cmd(\u0027create_clone_from_snap\u0027,"},{"line_number":487,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_22059a10","line":484,"updated":"2016-06-29 12:42:10.000000000","message":"Same comment.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        if not snap_id:"},{"line_number":482,"context_line":"            LOG.error(_LE(\u0027Snapshot %(name)s not found\u0027),"},{"line_number":483,"context_line":"                      {\u0027name\u0027: snapshot[\u0027name\u0027]})"},{"line_number":484,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dsnapshot[\u0027name\u0027])"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        self.vpsa.send_cmd(\u0027create_clone_from_snap\u0027,"},{"line_number":487,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_7bad5d83","line":484,"in_reply_to":"3aaa91ec_22059a10","updated":"2016-06-30 15:17:46.000000000","message":"Done","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":503,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":504,"context_line":"        if not cg_name:"},{"line_number":505,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":506,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dvolume_name)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        self.vpsa.send_cmd(\u0027create_clone\u0027,"},{"line_number":509,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_02497e60","line":506,"updated":"2016-06-29 12:42:10.000000000","message":"-1: Please pass message or use a different exception.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":503,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":504,"context_line":"        if not cg_name:"},{"line_number":505,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":506,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dvolume_name)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        self.vpsa.send_cmd(\u0027create_clone\u0027,"},{"line_number":509,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_3b059579","line":506,"in_reply_to":"3aaa91ec_02497e60","updated":"2016-06-30 15:17:46.000000000","message":"Done","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        if not vpsa_vol:"},{"line_number":522,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":523,"context_line":"                          \u0027It might be already deleted\u0027), {\u0027name\u0027: name})"},{"line_number":524,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dname)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        if new_size \u003c size:"},{"line_number":527,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_2288fa70","line":524,"updated":"2016-06-29 12:42:10.000000000","message":"Same comment. Please fix this in other places.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        if not vpsa_vol:"},{"line_number":522,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":523,"context_line":"                          \u0027It might be already deleted\u0027), {\u0027name\u0027: name})"},{"line_number":524,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dname)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        if new_size \u003c size:"},{"line_number":527,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_7b327d5f","line":524,"in_reply_to":"3aaa91ec_2288fa70","updated":"2016-06-30 15:17:46.000000000","message":"Done","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e6f2e848994523a4fc324c848cd97a8575bdfb59","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                          \u0027It might be already deleted\u0027), {\u0027name\u0027: name})"},{"line_number":524,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dname)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        if new_size \u003c size:"},{"line_number":527,"context_line":"            raise exception.InvalidInput("},{"line_number":528,"context_line":"                reason\u003d_(\u0027%(new_size)s \u003c current size %(size)s\u0027) %"},{"line_number":529,"context_line":"                {\u0027new_size\u0027: new_size, \u0027size\u0027: size})"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_e2fd52b2","line":526,"updated":"2016-06-29 12:42:10.000000000","message":"Already checked in api.\nSee https://github.com/openstack/cinder/blob/master/cinder/volume/api.py#L1183","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"055e24806c85fd0e1ea537c78b345dccda285c7f","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                          \u0027It might be already deleted\u0027), {\u0027name\u0027: name})"},{"line_number":524,"context_line":"            raise exception.VolumeDriverException(volume_id\u003dname)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        if new_size \u003c size:"},{"line_number":527,"context_line":"            raise exception.InvalidInput("},{"line_number":528,"context_line":"                reason\u003d_(\u0027%(new_size)s \u003c current size %(size)s\u0027) %"},{"line_number":529,"context_line":"                {\u0027new_size\u0027: new_size, \u0027size\u0027: size})"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_bbdce5e4","line":526,"in_reply_to":"3aaa91ec_e2fd52b2","updated":"2016-06-30 15:17:46.000000000","message":"don\u0027t think that checking something once more is a bad idea. Will handle incorrect params in case of validation API is broken.","commit_id":"d615503f5a06640d16c79dd09e0e850628073b72"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f459722a35e43d77641273209a4ae4fb1496d3cf","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            # Snapshot operations"},{"line_number":117,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":118,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.xml\u0027"},{"line_number":119,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":120,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":121,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_f85edde7","line":118,"updated":"2016-07-05 00:56:12.000000000","message":"You don\u0027t have a create individual snapshot API?  How did you create the consistency group?  I don\u0027t see any code in this driver that has implemented Cinder\u0027s consistency groups APIs.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"ff03d1cf411f343abfde886ae0112985fbb8e13e","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            # Snapshot operations"},{"line_number":117,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":118,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.xml\u0027"},{"line_number":119,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":120,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":121,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_88f3f49d","line":118,"in_reply_to":"1aa78d24_f85edde7","updated":"2016-07-05 12:07:58.000000000","message":"This API call is in fact an individual snapshot creation request.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f459722a35e43d77641273209a4ae4fb1496d3cf","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        volume \u003d self._xml_parse_helper(xml_tree, \u0027volumes\u0027,"},{"line_number":328,"context_line":"                                        (\u0027display-name\u0027, name))"},{"line_number":329,"context_line":"        if volume is not None:"},{"line_number":330,"context_line":"            return volume.findtext(\u0027cg-name\u0027)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        return None"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_78faedbe","line":330,"updated":"2016-07-05 00:56:12.000000000","message":"How did a volume gets \u0027cg-name\u0027?  I don\u0027t see it in your create volume API.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"ff03d1cf411f343abfde886ae0112985fbb8e13e","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        volume \u003d self._xml_parse_helper(xml_tree, \u0027volumes\u0027,"},{"line_number":328,"context_line":"                                        (\u0027display-name\u0027, name))"},{"line_number":329,"context_line":"        if volume is not None:"},{"line_number":330,"context_line":"            return volume.findtext(\u0027cg-name\u0027)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        return None"},{"line_number":333,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_2822c001","line":330,"in_reply_to":"1aa78d24_78faedbe","updated":"2016-07-05 12:07:58.000000000","message":"cg-name is unique attribute that is created for each volume.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f459722a35e43d77641273209a4ae4fb1496d3cf","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                      {\u0027name\u0027: pool_name, \u0027total\u0027: total, \u0027free\u0027: free})"},{"line_number":355,"context_line":"            return (total, free)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        return (\u0027infinite\u0027, \u0027infinite\u0027)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def _get_active_controller_details(self):"},{"line_number":360,"context_line":"        \"\"\"Return details of VPSA\u0027s active controller.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_985eb910","line":357,"updated":"2016-07-05 00:56:12.000000000","message":"Please return \u0027unknown\u0027 instead of \u0027infinite\u0027.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"ff03d1cf411f343abfde886ae0112985fbb8e13e","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                      {\u0027name\u0027: pool_name, \u0027total\u0027: total, \u0027free\u0027: free})"},{"line_number":355,"context_line":"            return (total, free)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        return (\u0027infinite\u0027, \u0027infinite\u0027)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def _get_active_controller_details(self):"},{"line_number":360,"context_line":"        \"\"\"Return details of VPSA\u0027s active controller.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_c8797cfe","line":357,"in_reply_to":"1aa78d24_985eb910","updated":"2016-07-05 12:07:58.000000000","message":"Done","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f459722a35e43d77641273209a4ae4fb1496d3cf","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":433,"context_line":"        if not cg_name:"},{"line_number":434,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":435,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        self.vpsa.send_cmd(\u0027create_snapshot\u0027,"},{"line_number":438,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_b891f59b","line":435,"updated":"2016-07-05 00:56:12.000000000","message":"Do you expect to have every volume in a CG?","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"ff03d1cf411f343abfde886ae0112985fbb8e13e","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":433,"context_line":"        if not cg_name:"},{"line_number":434,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":435,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        self.vpsa.send_cmd(\u0027create_snapshot\u0027,"},{"line_number":438,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_2850005e","line":435,"in_reply_to":"1aa78d24_b891f59b","updated":"2016-07-05 12:07:58.000000000","message":"There is no traditional CG usage within our drivers.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f459722a35e43d77641273209a4ae4fb1496d3cf","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            LOG.warning(_LW(\u0027snapshot: original volume %s not found, \u0027"},{"line_number":453,"context_line":"                            \u0027skipping delete operation\u0027),"},{"line_number":454,"context_line":"                        volume_name)"},{"line_number":455,"context_line":"            return"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":458,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_988cf980","line":455,"updated":"2016-07-05 00:56:12.000000000","message":"Same question here.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"ff03d1cf411f343abfde886ae0112985fbb8e13e","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            LOG.warning(_LW(\u0027snapshot: original volume %s not found, \u0027"},{"line_number":453,"context_line":"                            \u0027skipping delete operation\u0027),"},{"line_number":454,"context_line":"                        volume_name)"},{"line_number":455,"context_line":"            return"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":458,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_a8ca3018","line":455,"in_reply_to":"1aa78d24_988cf980","updated":"2016-07-05 12:07:58.000000000","message":"there is no traditional CG usage within our drivers.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f459722a35e43d77641273209a4ae4fb1496d3cf","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":476,"context_line":"        if not cg_name:"},{"line_number":477,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":478,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":481,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_182ac92c","line":478,"updated":"2016-07-05 00:56:12.000000000","message":"Same here","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"ff03d1cf411f343abfde886ae0112985fbb8e13e","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":476,"context_line":"        if not cg_name:"},{"line_number":477,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":478,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":481,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_a8f1906c","line":478,"in_reply_to":"1aa78d24_182ac92c","updated":"2016-07-05 12:07:58.000000000","message":"there is no traditional CG usage within our drivers.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f459722a35e43d77641273209a4ae4fb1496d3cf","unresolved":false,"context_lines":[{"line_number":503,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":504,"context_line":"        if not cg_name:"},{"line_number":505,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":506,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        self.vpsa.send_cmd(\u0027create_clone\u0027,"},{"line_number":509,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_f82c1d4c","line":506,"updated":"2016-07-05 00:56:12.000000000","message":"Same here.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"ff03d1cf411f343abfde886ae0112985fbb8e13e","unresolved":false,"context_lines":[{"line_number":503,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":504,"context_line":"        if not cg_name:"},{"line_number":505,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":506,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        self.vpsa.send_cmd(\u0027create_clone\u0027,"},{"line_number":509,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_e8eb9876","line":506,"in_reply_to":"1aa78d24_f82c1d4c","updated":"2016-07-05 12:07:58.000000000","message":"there is no traditional CG usage within our drivers.","commit_id":"b26c2c48a22d697be7e052c035eafe96826024ba"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8a0ba506d3b522cf563c07fe40016b05805a13f8","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            # Snapshot operations"},{"line_number":117,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":118,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.xml\u0027"},{"line_number":119,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":120,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":121,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_f05a5a4f","line":118,"updated":"2016-07-05 13:28:28.000000000","message":"Can you add a comment that this API is for individual snapshot creation and have nothing to do with consistency groups and consistency_groups in the API is from the legacy code?  Otherwise someone else will be confused and ask about these again.","commit_id":"6dad3331b35b57de519ddb3a29b04546bac63393"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"f1275264de31279c7332279ba8e52c9f014e6b43","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            # Snapshot operations"},{"line_number":117,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":118,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.xml\u0027"},{"line_number":119,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":120,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":121,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_bc16e952","line":118,"in_reply_to":"1aa78d24_f05a5a4f","updated":"2016-07-05 15:00:28.000000000","message":"Done","commit_id":"6dad3331b35b57de519ddb3a29b04546bac63393"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8a0ba506d3b522cf563c07fe40016b05805a13f8","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        return vol_name"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _get_volume_cg_name(self, name):"},{"line_number":325,"context_line":"        \"\"\"Return name of the consistency group for the volume.\"\"\""},{"line_number":326,"context_line":"        xml_tree \u003d self.vpsa.send_cmd(\u0027list_volumes\u0027)"},{"line_number":327,"context_line":"        volume \u003d self._xml_parse_helper(xml_tree, \u0027volumes\u0027,"},{"line_number":328,"context_line":"                                        (\u0027display-name\u0027, name))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_3b3163ed","line":325,"updated":"2016-07-05 13:28:28.000000000","message":"Please add a comment that the volume is not really in a consistency group.  This is just an attribute for the volume and it is from the legacy code.","commit_id":"6dad3331b35b57de519ddb3a29b04546bac63393"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"f1275264de31279c7332279ba8e52c9f014e6b43","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        return vol_name"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _get_volume_cg_name(self, name):"},{"line_number":325,"context_line":"        \"\"\"Return name of the consistency group for the volume.\"\"\""},{"line_number":326,"context_line":"        xml_tree \u003d self.vpsa.send_cmd(\u0027list_volumes\u0027)"},{"line_number":327,"context_line":"        volume \u003d self._xml_parse_helper(xml_tree, \u0027volumes\u0027,"},{"line_number":328,"context_line":"                                        (\u0027display-name\u0027, name))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_5c08a52c","line":325,"in_reply_to":"1aa78d24_3b3163ed","updated":"2016-07-05 15:00:28.000000000","message":"Done","commit_id":"6dad3331b35b57de519ddb3a29b04546bac63393"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9e46c0878113f254216eee842be399b5053152b9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            # Snapshot operations"},{"line_number":117,"context_line":"            # Snapshot request is triggered for a single volume thought the"},{"line_number":118,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":119,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":120,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.xml\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_545dde45","line":117,"updated":"2016-07-06 14:54:05.000000000","message":"s/thought/though","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"            # Snapshot operations"},{"line_number":117,"context_line":"            # Snapshot request is triggered for a single volume thought the"},{"line_number":118,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":119,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":120,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.xml\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_d41544e5","line":117,"in_reply_to":"1aa78d24_545dde45","updated":"2016-07-06 21:35:47.000000000","message":"Done","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            body \u003d _joined_params(params)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        else:"},{"line_number":203,"context_line":"            raise exception.UnknownCmd(cmd\u003dmethod)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        return (method, url, body)"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_c19c6dc2","line":203,"updated":"2016-07-06 15:45:08.000000000","message":"I don\u0027t think this exception is appropriate here. This implies a programming error. It\u0027s better to throw an assertion error here.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            body \u003d _joined_params(params)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        else:"},{"line_number":203,"context_line":"            raise exception.UnknownCmd(cmd\u003dmethod)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        return (method, url, body)"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_13d5191b","line":203,"in_reply_to":"1aa78d24_c19c6dc2","updated":"2016-07-06 21:35:47.000000000","message":"Done","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            body \u003d _joined_params(params)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        else:"},{"line_number":203,"context_line":"            raise exception.UnknownCmd(cmd\u003dmethod)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        return (method, url, body)"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_44e6b9b0","line":203,"in_reply_to":"1aa78d24_c19c6dc2","updated":"2016-07-06 21:35:47.000000000","message":"Done","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":439,"context_line":"        if not cg_name:"},{"line_number":440,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":441,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        self.vpsa.send_cmd(\u0027create_snapshot\u0027,"},{"line_number":444,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_21257108","line":441,"range":{"start_line":441,"start_character":53,"end_line":441,"end_character":64},"updated":"2016-07-06 15:45:08.000000000","message":"snapshot[\u0027volume_id\u0027]","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":439,"context_line":"        if not cg_name:"},{"line_number":440,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":441,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        self.vpsa.send_cmd(\u0027create_snapshot\u0027,"},{"line_number":444,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_ae677cb5","line":441,"range":{"start_line":441,"start_character":53,"end_line":441,"end_character":64},"in_reply_to":"1aa78d24_21257108","updated":"2016-07-06 21:35:47.000000000","message":"Vipin, Can you please provide more info regarding this issue? volume_name is the fully qualified name set in - \n volume_name \u003d (self.configuration.zadara_vol_name_template\n                       % snapshot[\u0027volume_name\u0027])\n(Line 436)","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"88ef6fdf8ef2866b7f906847795772df3ae1fb93","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":439,"context_line":"        if not cg_name:"},{"line_number":440,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":441,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        self.vpsa.send_cmd(\u0027create_snapshot\u0027,"},{"line_number":444,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_56e5a106","line":441,"range":{"start_line":441,"start_character":53,"end_line":441,"end_character":64},"in_reply_to":"1aa78d24_ae677cb5","updated":"2016-07-07 15:08:23.000000000","message":"The exception message expects the \"volume ID\". You already have an error log which prints the custom volume name.\n\nAssume that we change the message in VolumeNotFound to:\n\"Volume with ID: %(volume_id)s not found\"\n\nIn that case, the formatted string may not be appropriate if we pass the custom name as volume_id.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":482,"context_line":"        if not cg_name:"},{"line_number":483,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":484,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":487,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_416fdd2a","line":484,"range":{"start_line":484,"start_character":53,"end_line":484,"end_character":64},"updated":"2016-07-06 15:45:08.000000000","message":"volume[\u0027id\u0027]","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":482,"context_line":"        if not cg_name:"},{"line_number":483,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":484,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":487,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_ce0128b1","line":484,"range":{"start_line":484,"start_character":53,"end_line":484,"end_character":64},"in_reply_to":"1aa78d24_416fdd2a","updated":"2016-07-06 21:35:47.000000000","message":"same as above.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        if not snap_id:"},{"line_number":488,"context_line":"            LOG.error(_LE(\u0027Snapshot %(name)s not found\u0027),"},{"line_number":489,"context_line":"                      {\u0027name\u0027: snapshot[\u0027name\u0027]})"},{"line_number":490,"context_line":"            raise exception.SnapshotNotFound(snapshot_id\u003dsnapshot[\u0027name\u0027])"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        self.vpsa.send_cmd(\u0027create_clone_from_snap\u0027,"},{"line_number":493,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_614939b7","line":490,"range":{"start_line":490,"start_character":57,"end_line":490,"end_character":73},"updated":"2016-07-06 15:45:08.000000000","message":"snapshot[\u0027id\u0027]","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        if not snap_id:"},{"line_number":488,"context_line":"            LOG.error(_LE(\u0027Snapshot %(name)s not found\u0027),"},{"line_number":489,"context_line":"                      {\u0027name\u0027: snapshot[\u0027name\u0027]})"},{"line_number":490,"context_line":"            raise exception.SnapshotNotFound(snapshot_id\u003dsnapshot[\u0027name\u0027])"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        self.vpsa.send_cmd(\u0027create_clone_from_snap\u0027,"},{"line_number":493,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_0e2e9042","line":490,"range":{"start_line":490,"start_character":57,"end_line":490,"end_character":73},"in_reply_to":"1aa78d24_614939b7","updated":"2016-07-06 21:35:47.000000000","message":"same as above.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                           snap_id\u003dsnap_id)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        if (volume[\u0027size\u0027] \u003e snapshot[\u0027volume_size\u0027]):"},{"line_number":499,"context_line":"            self.extend_volume(volume, volume[\u0027size\u0027])"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":502,"context_line":"        \"\"\"Creates a clone of the specified volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_a16961fb","line":499,"updated":"2016-07-06 15:45:08.000000000","message":"I couldn\u0027t find any unit test coverage for this case.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                           snap_id\u003dsnap_id)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        if (volume[\u0027size\u0027] \u003e snapshot[\u0027volume_size\u0027]):"},{"line_number":499,"context_line":"            self.extend_volume(volume, volume[\u0027size\u0027])"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":502,"context_line":"        \"\"\"Creates a clone of the specified volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_4e58988a","line":499,"in_reply_to":"1aa78d24_a16961fb","updated":"2016-07-06 21:35:47.000000000","message":"You are right, as discussed on previous comments - we will have our unit tests rebuilt in the next version, we will cover this case in our next patch.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":510,"context_line":"        if not cg_name:"},{"line_number":511,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":512,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"        self.vpsa.send_cmd(\u0027create_clone\u0027,"},{"line_number":515,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_c14bcd85","line":512,"range":{"start_line":512,"start_character":53,"end_line":512,"end_character":64},"updated":"2016-07-06 15:45:08.000000000","message":"volume[\u0027id\u0027]","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":510,"context_line":"        if not cg_name:"},{"line_number":511,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":512,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"        self.vpsa.send_cmd(\u0027create_clone\u0027,"},{"line_number":515,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_aea5bc47","line":512,"range":{"start_line":512,"start_character":53,"end_line":512,"end_character":64},"in_reply_to":"1aa78d24_c14bcd85","updated":"2016-07-06 21:35:47.000000000","message":"Vipin, Can you please provide more info regarding this issue?","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        if not vpsa_vol:"},{"line_number":528,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":529,"context_line":"                          \u0027It might be already deleted\u0027), {\u0027name\u0027: name})"},{"line_number":530,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"        if new_size \u003c size:"},{"line_number":533,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_6153f939","line":530,"range":{"start_line":530,"start_character":53,"end_line":530,"end_character":57},"updated":"2016-07-06 15:45:08.000000000","message":"volume[\u0027id\u0027]\n\n\nI think it is better to create a sub-class of VolumeDriverException instead of using VolumeNotFound to avoid any confusion. The volume definitely exists as per Cinder database, but it\u0027s the backend object which is not found.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        if not vpsa_vol:"},{"line_number":528,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":529,"context_line":"                          \u0027It might be already deleted\u0027), {\u0027name\u0027: name})"},{"line_number":530,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"        if new_size \u003c size:"},{"line_number":533,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_6e0bd42a","line":530,"range":{"start_line":530,"start_character":53,"end_line":530,"end_character":57},"in_reply_to":"1aa78d24_6153f939","updated":"2016-07-06 21:35:47.000000000","message":"This exception was altered from VolumeDriverException per your review, should we revert it back?","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"88ef6fdf8ef2866b7f906847795772df3ae1fb93","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        if not vpsa_vol:"},{"line_number":528,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":529,"context_line":"                          \u0027It might be already deleted\u0027), {\u0027name\u0027: name})"},{"line_number":530,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"        if new_size \u003c size:"},{"line_number":533,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_79e08e29","line":530,"range":{"start_line":530,"start_character":53,"end_line":530,"end_character":57},"in_reply_to":"1aa78d24_6e0bd42a","updated":"2016-07-07 15:08:23.000000000","message":"I was not suggesting to use VolumeNotFound, sorry for the confusion.","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":572,"context_line":"        vpsa_vol \u003d self._get_vpsa_volume_name(name)"},{"line_number":573,"context_line":"        if not vpsa_vol:"},{"line_number":574,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        # Get Active controller details"},{"line_number":577,"context_line":"        ctrl \u003d self._get_active_controller_details()"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_1c1ed85e","line":574,"range":{"start_line":574,"start_character":53,"end_line":574,"end_character":57},"updated":"2016-07-06 15:45:08.000000000","message":"volume[\u0027id\u0027]","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"826b5f9764bc17dd7e8dd7ba89b4adec6b90641f","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":572,"context_line":"        vpsa_vol \u003d self._get_vpsa_volume_name(name)"},{"line_number":573,"context_line":"        if not vpsa_vol:"},{"line_number":574,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        # Get Active controller details"},{"line_number":577,"context_line":"        ctrl \u003d self._get_active_controller_details()"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_893c3ac9","line":574,"range":{"start_line":574,"start_character":53,"end_line":574,"end_character":57},"in_reply_to":"1aa78d24_1c1ed85e","updated":"2016-07-06 21:35:47.000000000","message":"Vipin, Can you please provide more info regarding this issue?","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"0384c70d9f484bc0ff91d568b37ece0712cf2ba4","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":631,"context_line":"        vpsa_vol \u003d self._get_vpsa_volume_name(name)"},{"line_number":632,"context_line":"        if not vpsa_vol:"},{"line_number":633,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dname)"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        # Detach volume from server"},{"line_number":636,"context_line":"        self.vpsa.send_cmd(\u0027detach_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_bc534416","line":633,"range":{"start_line":633,"start_character":53,"end_line":633,"end_character":57},"updated":"2016-07-06 15:45:08.000000000","message":"volume[\u0027id\u0027]","commit_id":"dab2900106c71797e74f70d146069e102037dd62"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"4174ba112c251273f3e639397abce3af05bdd904","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            msg \u003d (_(\u0027Method %(method)s is not defined\u0027) %"},{"line_number":204,"context_line":"                   {\u0027method\u0027: method})"},{"line_number":205,"context_line":"            LOG.error(msg)"},{"line_number":206,"context_line":"            raise AssertionError(msg)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return (method, url, body)"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_19a18a46","line":206,"updated":"2016-07-07 15:14:22.000000000","message":"nit: we have ProgrammingError in exceptions.","commit_id":"05ff09fb6c02b129607fc33d5f464eaff41ff0c0"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"4174ba112c251273f3e639397abce3af05bdd904","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":442,"context_line":"        if not cg_name:"},{"line_number":443,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":444,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dvolume_name)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        self.vpsa.send_cmd(\u0027create_snapshot\u0027,"},{"line_number":447,"context_line":"                           cg_name\u003dcg_name,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_79b36e98","line":444,"updated":"2016-07-07 15:14:22.000000000","message":"I think we shouldn\u0027t use VolumeNotFound here because the Cinder volume exists; it\u0027s the backend object which is missing. Normally we raise VolumeNotFound if the volume is not found in the DB which is not the case here.\n\nI assume that the exception raised here is handled by the manager and not within the driver, so we can raise VolumeDriverException, but please set the message kwarg as I mentioned in patch set 16.","commit_id":"05ff09fb6c02b129607fc33d5f464eaff41ff0c0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fc824871721741c74d3067a35a737748d610d41b","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            msg \u003d (_(\u0027Method %(method)s is not defined\u0027) %"},{"line_number":204,"context_line":"                   {\u0027method\u0027: method})"},{"line_number":205,"context_line":"            LOG.error(msg)"},{"line_number":206,"context_line":"            raise AssertionError(msg)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return (method, url, body)"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_bb5e2174","line":206,"updated":"2016-07-08 18:14:03.000000000","message":"You have changed this to ProgrammingError in patch set 19, but the change is lost here.  You may want to check to see if you have lost other changes that you did in patch set 19.\n\nraise exception.ProgrammingError(reason\u003dmsg)","commit_id":"cab0bb2ccf69f18ea286fff66b6033e378190af9"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"1b4faa86200738e7c7b45ed2c063bdf6954024dd","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            msg \u003d (_(\u0027Method %(method)s is not defined\u0027) %"},{"line_number":204,"context_line":"                   {\u0027method\u0027: method})"},{"line_number":205,"context_line":"            LOG.error(msg)"},{"line_number":206,"context_line":"            raise AssertionError(msg)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return (method, url, body)"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_965dfcee","line":206,"in_reply_to":"1aa78d24_bb5e2174","updated":"2016-07-08 18:31:23.000000000","message":"That is correct, I\u0027ve reverted this change on purpose as it ended with the rebase issues I had with patch set 19. As we are stepping into Newton\u0027s deadline, If it\u0027s ok with you, I\u0027d like to take this change to our next version.","commit_id":"cab0bb2ccf69f18ea286fff66b6033e378190af9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fc824871721741c74d3067a35a737748d610d41b","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":486,"context_line":"        if not cg_name:"},{"line_number":487,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":488,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dsnapshot[\u0027id\u0027])"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":491,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_7b8cb935","line":488,"updated":"2016-07-08 18:14:03.000000000","message":"This is VolumeNotFound, so it should be volume[\u0027id\u0027]","commit_id":"cab0bb2ccf69f18ea286fff66b6033e378190af9"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"1b4faa86200738e7c7b45ed2c063bdf6954024dd","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        cg_name \u003d self._get_volume_cg_name(volume_name)"},{"line_number":486,"context_line":"        if not cg_name:"},{"line_number":487,"context_line":"            LOG.error(_LE(\u0027Volume %(name)s not found\u0027), {\u0027name\u0027: volume_name})"},{"line_number":488,"context_line":"            raise exception.VolumeNotFound(volume_id\u003dsnapshot[\u0027id\u0027])"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        snap_id \u003d self._get_snap_id(cg_name, snapshot[\u0027name\u0027])"},{"line_number":491,"context_line":"        if not snap_id:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_76cb301f","line":488,"in_reply_to":"1aa78d24_7b8cb935","updated":"2016-07-08 18:31:23.000000000","message":"Done","commit_id":"cab0bb2ccf69f18ea286fff66b6033e378190af9"}],"releasenotes/notes/ZadaraStorage-13a5fff6f4fa1710.yaml":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"b874aa10cfdeaed11aab053f56c97ea8ac0eb930","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Zadara Storage VPSA (Virtual Private Storage Array) backend driver for"},{"line_number":4,"context_line":"    Cinder."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Backend driver for Zadara Storage VPSA ."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"fa69d971_c170880d","line":6,"range":{"start_line":6,"start_character":42,"end_line":6,"end_character":43},"updated":"2016-01-06 19:23:51.000000000","message":"Please remove the extra space here.","commit_id":"9d9d6965aed45491a4fd5f0cd9804ece86bee862"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e59765f1090d2f76bf31a30fbbc8dafa562bc2b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Zadara Storage VPSA (Virtual Private Storage Array) backend driver for"},{"line_number":4,"context_line":"    Cinder."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Backend driver for Zadara Storage VPSA."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ba63e191_0fbb06c6","line":3,"updated":"2016-01-18 19:27:30.000000000","message":"Remove prelude section.","commit_id":"9bede0aa4eb5833c05149a3b22587c05ef3bba0a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e4e971e07c39ec5fa74fc20bff40dc81c31d5474","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Zadara Storage VPSA (Virtual Private Storage Array) backend driver for"},{"line_number":4,"context_line":"    Cinder."},{"line_number":5,"context_line":"features:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1a122d0e_b63d592d","line":2,"updated":"2016-04-26 13:10:57.000000000","message":"Please remove this prelude section.","commit_id":"61b897adb27af8c0a01b6b5884e7ebbf67f962e0"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"833712145fad800af2ac867f2b7c5e080e713b3a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Backend driver for Zadara Storage VPSA."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"1a122d0e_ec28aa99","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":11},"updated":"2016-05-04 23:16:02.000000000","message":"Might want to call it a Volume driver","commit_id":"3a95d52b2771c678e25d7e8f8db3470d2c3645e4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362b7a8e62ed21ca5c08e25f25a465d057bc6ae0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Volume driver for Zadara Storage VPSA."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bab6814e_3362c70a","line":3,"updated":"2016-05-22 20:29:59.000000000","message":"Added volume driver for Zadara Storage VPSA.","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"},{"author":{"_account_id":19755,"name":"Shlomi Avihou","email":"shlomi@zadarastorage.com","username":"savihou"},"change_message_id":"0c4ed22a6339fc35037eff24ce11f3b72b874bad","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Volume driver for Zadara Storage VPSA."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bab6814e_93c9ecae","line":3,"in_reply_to":"bab6814e_3362c70a","updated":"2016-05-23 12:28:41.000000000","message":"Done","commit_id":"674e2e04f113e275b8ee7ebdf8580723b061a156"}]}
