)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"72e0022d691a8fa856e9c38252b904cda56cfdf6","unresolved":false,"context_lines":[{"line_number":10,"context_line":"the example of https://review.openstack.org/#/c/198554/"},{"line_number":11,"context_line":"Also this includes example of init_capabilities() for LVM"},{"line_number":12,"context_line":"driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7a019f0296511bfda5b373e508071853d85e2376"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a41bdd9_3839e241","line":13,"updated":"2015-07-14 13:24:27.000000000","message":"Does this have a DocImpact? Also, since its adding capabilities, I think it needs a blueprint that should get included in the commit message.","commit_id":"b5501d5c73ab253ef3d9bbfe6f0c83b474c3017d"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"8fd71060ab2fcc7e725bac3ac573f5fa45908f18","unresolved":false,"context_lines":[{"line_number":10,"context_line":"the example of https://review.openstack.org/#/c/198554/"},{"line_number":11,"context_line":"Also this includes example of init_capabilities() for LVM"},{"line_number":12,"context_line":"driver."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7a019f0296511bfda5b373e508071853d85e2376"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a41bdd9_c306af85","line":13,"in_reply_to":"9a41bdd9_3839e241","updated":"2015-07-14 23:00:20.000000000","message":"Done","commit_id":"b5501d5c73ab253ef3d9bbfe6f0c83b474c3017d"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"39b8f32b7890f4442d41df1c0a44178595d22de4","unresolved":false,"context_lines":[{"line_number":45,"context_line":"}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"DocImpact"},{"line_number":48,"context_line":"Implements: get-volume-type-extra-specs"},{"line_number":49,"context_line":"Change-Id: I7a019f0296511bfda5b373e508071853d85e2376"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_a263a1dc","line":48,"updated":"2015-08-10 23:53:15.000000000","message":"I think you need to \"Implements: blueprint get-volume-type-extra-specs\" for it to create the link correctly. see Implements: blueprint BLUEPRINT in http://docs.openstack.org/infra/manual/developers.html#committing-a-change","commit_id":"512d472215fc940d136d8913f0b50738c51d5ea3"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"e56e0fc8ca47e87c1c7621c04c87e545b9593101","unresolved":false,"context_lines":[{"line_number":45,"context_line":"}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"DocImpact"},{"line_number":48,"context_line":"Implements: get-volume-type-extra-specs"},{"line_number":49,"context_line":"Change-Id: I7a019f0296511bfda5b373e508071853d85e2376"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a4dcd0f_e25a09f2","line":48,"in_reply_to":"1a4dcd0f_a263a1dc","updated":"2015-08-10 23:59:25.000000000","message":"Thank you for your confirmation. I didn\u0027t notice this.","commit_id":"512d472215fc940d136d8913f0b50738c51d5ea3"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8c7726091cb05421149122d2074698dda9a74b21","unresolved":false,"context_lines":[{"line_number":33,"context_line":"   \u0027driver_version\u0027: \u00272.0.0\u0027,"},{"line_number":34,"context_line":"   \u0027storage_protocol\u0027: \u0027iSCSI\u0027,"},{"line_number":35,"context_line":"   \u0027properties:\u0027 {"},{"line_number":36,"context_line":"        \u0027thin_proivisoning\u0027: {"},{"line_number":37,"context_line":"            \u0027title\u0027: \u0027Thin Provisioning\u0027,"},{"line_number":38,"context_line":"            \u0027description\u0027: \u0027Sets thin provisioning.\u0027,"},{"line_number":39,"context_line":"            \u0027type\u0027: \u0027boolean\u0027},"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"fa1b9901_0ab4cb7f","line":36,"updated":"2015-08-19 15:13:01.000000000","message":"\"thin_provisioning\"","commit_id":"43cff22e8b75775652fb046107aaf6cce8b172d6"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"46689dfef4947386c3d77026b7cffa6e88f4479c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"   \u0027driver_version\u0027: \u00272.0.0\u0027,"},{"line_number":34,"context_line":"   \u0027storage_protocol\u0027: \u0027iSCSI\u0027,"},{"line_number":35,"context_line":"   \u0027properties:\u0027 {"},{"line_number":36,"context_line":"        \u0027thin_proivisoning\u0027: {"},{"line_number":37,"context_line":"            \u0027title\u0027: \u0027Thin Provisioning\u0027,"},{"line_number":38,"context_line":"            \u0027description\u0027: \u0027Sets thin provisioning.\u0027,"},{"line_number":39,"context_line":"            \u0027type\u0027: \u0027boolean\u0027},"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"fa1b9901_93d9f624","line":36,"in_reply_to":"fa1b9901_0ab4cb7f","updated":"2015-08-19 15:55:34.000000000","message":"Done","commit_id":"43cff22e8b75775652fb046107aaf6cce8b172d6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"36575c54a08ded12159b85f97eb22681c7aa9781","unresolved":false,"context_lines":[{"line_number":13,"context_line":"First part includes static backend capabilities which are"},{"line_number":14,"context_line":"obtained by get_volume_stats(). Second part is properties"},{"line_number":15,"context_line":"which includes parameters correspond to extra specs."},{"line_number":16,"context_line":"This part is consisted of cinder standard capabilities"},{"line_number":17,"context_line":"and vendor unique properties. These properties are set"},{"line_number":18,"context_line":"via these two methods."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa1b9901_f406ee1a","line":16,"updated":"2015-08-20 11:16:38.000000000","message":"nit: s/This part/This \u0027properties\u0027 part","commit_id":"e05854d3c0f2a3e698ba6798b14a126ab82b9b2a"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"625f41569c1755f31b851d48ded83f7988fae361","unresolved":false,"context_lines":[{"line_number":13,"context_line":"First part includes static backend capabilities which are"},{"line_number":14,"context_line":"obtained by get_volume_stats(). Second part is properties"},{"line_number":15,"context_line":"which includes parameters correspond to extra specs."},{"line_number":16,"context_line":"This part is consisted of cinder standard capabilities"},{"line_number":17,"context_line":"and vendor unique properties. These properties are set"},{"line_number":18,"context_line":"via these two methods."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"fa1b9901_26f2d806","line":16,"in_reply_to":"fa1b9901_f406ee1a","updated":"2015-08-20 22:03:10.000000000","message":"Done","commit_id":"e05854d3c0f2a3e698ba6798b14a126ab82b9b2a"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"46689dfef4947386c3d77026b7cffa6e88f4479c","unresolved":false,"context_lines":[{"line_number":5320,"context_line":"                \u0027title\u0027: \u0027Replication\u0027,"},{"line_number":5321,"context_line":"                \u0027description\u0027: \u0027Enables replication.\u0027,"},{"line_number":5322,"context_line":"                \u0027type\u0027: \u0027boolean\u0027},"},{"line_number":5323,"context_line":"            \u0027thin_proivisoning\u0027: {"},{"line_number":5324,"context_line":"                \u0027title\u0027: \u0027Thin Provisioning\u0027,"},{"line_number":5325,"context_line":"                \u0027description\u0027: \u0027Sets thin provisioning.\u0027,"},{"line_number":5326,"context_line":"                \u0027type\u0027: \u0027boolean\u0027},"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_b3443ab7","line":5323,"updated":"2015-08-19 15:55:34.000000000","message":"The test case is also fixed.","commit_id":"43cff22e8b75775652fb046107aaf6cce8b172d6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a0ec4241cd90b48265445451b050e04315371fb2","unresolved":false,"context_lines":[{"line_number":5373,"context_line":"        self.assertEqual(expected, capabilities)"},{"line_number":5374,"context_line":"        self.assertTrue(mock_get_volume_stats.called)"},{"line_number":5375,"context_line":""},{"line_number":5376,"context_line":"        # Error test case: propety does not match vendor prefix"},{"line_number":5377,"context_line":"        def init_vendor_properties(self):"},{"line_number":5378,"context_line":"            properties \u003d {}"},{"line_number":5379,"context_line":"            self._set_property("}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_688e4b2f","line":5376,"updated":"2015-08-21 08:12:16.000000000","message":"opt: Split this into 3 different tests.","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"261693e196133fdb4d8055d9b1eef7d00418af01","unresolved":false,"context_lines":[{"line_number":5373,"context_line":"        self.assertEqual(expected, capabilities)"},{"line_number":5374,"context_line":"        self.assertTrue(mock_get_volume_stats.called)"},{"line_number":5375,"context_line":""},{"line_number":5376,"context_line":"        # Error test case: propety does not match vendor prefix"},{"line_number":5377,"context_line":"        def init_vendor_properties(self):"},{"line_number":5378,"context_line":"            properties \u003d {}"},{"line_number":5379,"context_line":"            self._set_property("}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_7d5a7352","line":5376,"in_reply_to":"fa1b9901_688e4b2f","updated":"2015-08-21 16:14:31.000000000","message":"Done","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"}],"cinder/tests/unit/test_volume_rpcapi.py":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"55cae9a4edcc77ffc2eed63f5609066c92611788","unresolved":false,"context_lines":[{"line_number":313,"context_line":"                              rpc_method\u003d\u0027call\u0027,"},{"line_number":314,"context_line":"                              volume\u003dself.fake_volume,"},{"line_number":315,"context_line":"                              discover\u003dTrue,"},{"line_number":316,"context_line":"                              version\u003d\u00271.24\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_5076273f","line":316,"updated":"2015-07-27 04:51:19.000000000","message":"Please change it into 1.25.","commit_id":"859e279ca4516644187433b610773a46439d7e6b"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"265f351c71af55547f70e255f50a43b8a4521bc6","unresolved":false,"context_lines":[{"line_number":313,"context_line":"                              rpc_method\u003d\u0027call\u0027,"},{"line_number":314,"context_line":"                              volume\u003dself.fake_volume,"},{"line_number":315,"context_line":"                              discover\u003dTrue,"},{"line_number":316,"context_line":"                              version\u003d\u00271.24\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_5cfa6ebe","line":316,"in_reply_to":"3a50d1a3_5076273f","updated":"2015-07-28 15:24:42.000000000","message":"Thank you for your review. I fixed this at latest patch.Please visit latest one.","commit_id":"859e279ca4516644187433b610773a46439d7e6b"}],"cinder/volume/driver.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"004df52dbc24496cea9c018ea88e93f53d04e471","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            \"cinder_thin_proivisoning\","},{"line_number":496,"context_line":"            \"Thin Provisioning\","},{"line_number":497,"context_line":"            \"Sets thin provisioning.\","},{"line_number":498,"context_line":"            \"boolean\")"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"        self._set_properties("},{"line_number":501,"context_line":"            properties,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a4dcd0f_a3bcf96c","line":498,"updated":"2015-08-11 07:04:25.000000000","message":"Is it worthy to add a default value here?","commit_id":"ec9a1a4bfab88a3298f54b64d2dbab43abd0ea3a"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"1e277dbba8d4213f95ab2be2ccf71adf6b38478e","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            \"cinder_thin_proivisoning\","},{"line_number":496,"context_line":"            \"Thin Provisioning\","},{"line_number":497,"context_line":"            \"Sets thin provisioning.\","},{"line_number":498,"context_line":"            \"boolean\")"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"        self._set_properties("},{"line_number":501,"context_line":"            properties,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a4dcd0f_ed696cbf","line":498,"in_reply_to":"1a4dcd0f_a3bcf96c","updated":"2015-08-11 15:59:33.000000000","message":"Default is set to False without passing default parameter. so I think we don\u0027t need to pass default parameter explicitly.","commit_id":"ec9a1a4bfab88a3298f54b64d2dbab43abd0ea3a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8c7726091cb05421149122d2074698dda9a74b21","unresolved":false,"context_lines":[{"line_number":529,"context_line":"        \"\"\""},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        self._set_properties("},{"line_number":532,"context_line":"            \"thin_proivisoning\","},{"line_number":533,"context_line":"            \"Thin Provisioning\","},{"line_number":534,"context_line":"            _(\"Sets thin provisioning.\"),"},{"line_number":535,"context_line":"            \"boolean\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_6a6a27f0","line":532,"updated":"2015-08-19 15:13:01.000000000","message":"\"thin_provisioning\"","commit_id":"43cff22e8b75775652fb046107aaf6cce8b172d6"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"46689dfef4947386c3d77026b7cffa6e88f4479c","unresolved":false,"context_lines":[{"line_number":529,"context_line":"        \"\"\""},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        self._set_properties("},{"line_number":532,"context_line":"            \"thin_proivisoning\","},{"line_number":533,"context_line":"            \"Thin Provisioning\","},{"line_number":534,"context_line":"            _(\"Sets thin provisioning.\"),"},{"line_number":535,"context_line":"            \"boolean\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_7319c2d6","line":532,"in_reply_to":"fa1b9901_6a6a27f0","updated":"2015-08-19 15:55:34.000000000","message":"Done","commit_id":"43cff22e8b75775652fb046107aaf6cce8b172d6"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"36575c54a08ded12159b85f97eb22681c7aa9781","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    def _set_properties(self, entry, title, description,"},{"line_number":511,"context_line":"                        type, **kwargs):"},{"line_number":512,"context_line":"        prop \u003d dict(title\u003dtitle, description\u003ddescription, type\u003dtype)"},{"line_number":513,"context_line":"        for key in [\u0027enum\u0027, \u0027default\u0027, \u0027minimum\u0027, \u0027maximum\u0027]:"},{"line_number":514,"context_line":"            if key in kwargs:"},{"line_number":515,"context_line":"                prop[key] \u003d kwargs[key]"},{"line_number":516,"context_line":"        self.capabilities[\u0027properties\u0027][entry] \u003d prop"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_92e545a5","line":513,"updated":"2015-08-20 11:16:38.000000000","message":"opt: It would be best to loop through the kwargs instead and use a tuple instead of a list:\n\n allowed_keys \u003d (\u0027enum\u0027, \u0027default\u0027, \u0027minimum\u0027, \u0027maximum\u0027)\n for key in kwargs:\n     if key in allowed_keys:\n         prop[key] \u003d kwargs[key]","commit_id":"e05854d3c0f2a3e698ba6798b14a126ab82b9b2a"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"625f41569c1755f31b851d48ded83f7988fae361","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    def _set_properties(self, entry, title, description,"},{"line_number":511,"context_line":"                        type, **kwargs):"},{"line_number":512,"context_line":"        prop \u003d dict(title\u003dtitle, description\u003ddescription, type\u003dtype)"},{"line_number":513,"context_line":"        for key in [\u0027enum\u0027, \u0027default\u0027, \u0027minimum\u0027, \u0027maximum\u0027]:"},{"line_number":514,"context_line":"            if key in kwargs:"},{"line_number":515,"context_line":"                prop[key] \u003d kwargs[key]"},{"line_number":516,"context_line":"        self.capabilities[\u0027properties\u0027][entry] \u003d prop"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_e6b2a04b","line":513,"in_reply_to":"fa1b9901_92e545a5","updated":"2015-08-20 22:03:10.000000000","message":"Done","commit_id":"e05854d3c0f2a3e698ba6798b14a126ab82b9b2a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2aac14410879620ca87c8c8db326e7eda3b6f982","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        # Set static backend capabilities from get_volume_stats()"},{"line_number":615,"context_line":"        self.get_volume_stats(True)"},{"line_number":616,"context_line":"        self.capabilities \u003d self._stats.copy()"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        # Set cinder standard capabilities and vendor unique properties"},{"line_number":619,"context_line":"        self.capabilities[\u0027properties\u0027] \u003d {}"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_929be965","line":616,"updated":"2015-08-20 19:22:35.000000000","message":"self.capabilities needs to be defined in BaseVD __init__().","commit_id":"e05854d3c0f2a3e698ba6798b14a126ab82b9b2a"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"625f41569c1755f31b851d48ded83f7988fae361","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        # Set static backend capabilities from get_volume_stats()"},{"line_number":615,"context_line":"        self.get_volume_stats(True)"},{"line_number":616,"context_line":"        self.capabilities \u003d self._stats.copy()"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        # Set cinder standard capabilities and vendor unique properties"},{"line_number":619,"context_line":"        self.capabilities[\u0027properties\u0027] \u003d {}"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_066794e9","line":616,"in_reply_to":"fa1b9901_929be965","updated":"2015-08-20 22:03:10.000000000","message":"Done","commit_id":"e05854d3c0f2a3e698ba6798b14a126ab82b9b2a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"36575c54a08ded12159b85f97eb22681c7aa9781","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        # Set cinder standard capabilities and vendor unique properties"},{"line_number":619,"context_line":"        self.capabilities[\u0027properties\u0027] \u003d {}"},{"line_number":620,"context_line":"        self._init_standard_capabilities()"},{"line_number":621,"context_line":"        self._init_vendor_properties()"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"    def _update_pools_and_stats(self, data):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_327c79b4","line":620,"updated":"2015-08-20 11:16:38.000000000","message":"-1: It\u0027s not a good idea that _init_standard_capabilities and _init_vendor_properties modify class the attribute capabilities, it\u0027s harder to read that way and more restrictive.\n\nThey should just return a dictionary (of entries that should go into \u0027properties\u0027 key) and we should update the properties here.\n\nThat way we can check 2 things here from returned _init_vendor_properties\u0027s dictionary:\n- They don\u0027t override any standard capabilities\n- Keys conform to vendor_properties formatting (vendor_entry)","commit_id":"e05854d3c0f2a3e698ba6798b14a126ab82b9b2a"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"625f41569c1755f31b851d48ded83f7988fae361","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        # Set cinder standard capabilities and vendor unique properties"},{"line_number":619,"context_line":"        self.capabilities[\u0027properties\u0027] \u003d {}"},{"line_number":620,"context_line":"        self._init_standard_capabilities()"},{"line_number":621,"context_line":"        self._init_vendor_properties()"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"    def _update_pools_and_stats(self, data):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_267bb87c","line":620,"in_reply_to":"fa1b9901_327c79b4","updated":"2015-08-20 22:03:10.000000000","message":"Thank you for your review. Please see my updated patch set.","commit_id":"e05854d3c0f2a3e698ba6798b14a126ab82b9b2a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a0ec4241cd90b48265445451b050e04315371fb2","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        Vendor unique properties must start with vendor prefix."},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        Each backend driver needs to override this method to expose"},{"line_number":566,"context_line":"        own properties using _set_property() like this."},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        self._set_property("},{"line_number":569,"context_line":"            properties,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_08c9cfab","line":566,"updated":"2015-08-21 08:12:16.000000000","message":"nit: s/own/its own\n\nnit: s/like this./like this:","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"261693e196133fdb4d8055d9b1eef7d00418af01","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        Vendor unique properties must start with vendor prefix."},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        Each backend driver needs to override this method to expose"},{"line_number":566,"context_line":"        own properties using _set_property() like this."},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        self._set_property("},{"line_number":569,"context_line":"            properties,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_1d80178b","line":566,"in_reply_to":"fa1b9901_08c9cfab","updated":"2015-08-21 16:14:31.000000000","message":"Done","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a0ec4241cd90b48265445451b050e04315371fb2","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        # Set Vendor unique properties"},{"line_number":623,"context_line":"        vendor_prop, vendor_prefix \u003d self._init_vendor_properties()"},{"line_number":624,"context_line":"        if vendor_prefix and vendor_prop:"},{"line_number":625,"context_line":"            for key in vendor_prop.keys():"},{"line_number":626,"context_line":"                if key in self.capabilities[\u0027properties\u0027].keys():"},{"line_number":627,"context_line":"                    raise exception.Invalid("},{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_bdea67d9","line":625,"updated":"2015-08-21 08:12:16.000000000","message":"nit: Remove .keys(), in Python 2 you are creating a list of keys to iterate, but you don\u0027t really need to create that list.","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"261693e196133fdb4d8055d9b1eef7d00418af01","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        # Set Vendor unique properties"},{"line_number":623,"context_line":"        vendor_prop, vendor_prefix \u003d self._init_vendor_properties()"},{"line_number":624,"context_line":"        if vendor_prefix and vendor_prop:"},{"line_number":625,"context_line":"            for key in vendor_prop.keys():"},{"line_number":626,"context_line":"                if key in self.capabilities[\u0027properties\u0027].keys():"},{"line_number":627,"context_line":"                    raise exception.Invalid("},{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_bdb9eb7b","line":625,"in_reply_to":"fa1b9901_bdea67d9","updated":"2015-08-21 16:14:31.000000000","message":"Thanks. I understand the difference.","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a0ec4241cd90b48265445451b050e04315371fb2","unresolved":false,"context_lines":[{"line_number":623,"context_line":"        vendor_prop, vendor_prefix \u003d self._init_vendor_properties()"},{"line_number":624,"context_line":"        if vendor_prefix and vendor_prop:"},{"line_number":625,"context_line":"            for key in vendor_prop.keys():"},{"line_number":626,"context_line":"                if key in self.capabilities[\u0027properties\u0027].keys():"},{"line_number":627,"context_line":"                    raise exception.Invalid("},{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"},{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_bdd10725","line":626,"updated":"2015-08-21 08:12:16.000000000","message":"nit: No need for .keys() here, you can do like you did on line 515","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"261693e196133fdb4d8055d9b1eef7d00418af01","unresolved":false,"context_lines":[{"line_number":623,"context_line":"        vendor_prop, vendor_prefix \u003d self._init_vendor_properties()"},{"line_number":624,"context_line":"        if vendor_prefix and vendor_prop:"},{"line_number":625,"context_line":"            for key in vendor_prop.keys():"},{"line_number":626,"context_line":"                if key in self.capabilities[\u0027properties\u0027].keys():"},{"line_number":627,"context_line":"                    raise exception.Invalid("},{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"},{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_7dacb335","line":626,"in_reply_to":"fa1b9901_bdd10725","updated":"2015-08-21 16:14:31.000000000","message":"Done","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a0ec4241cd90b48265445451b050e04315371fb2","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        if vendor_prefix and vendor_prop:"},{"line_number":625,"context_line":"            for key in vendor_prop.keys():"},{"line_number":626,"context_line":"                if key in self.capabilities[\u0027properties\u0027].keys():"},{"line_number":627,"context_line":"                    raise exception.Invalid("},{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"},{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"},{"line_number":630,"context_line":"                        % {\u0027property\u0027: key})"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_3de097cc","line":627,"updated":"2015-08-21 08:12:16.000000000","message":"-1: Log warning instead of raising an exception, it wouldn\u0027t be nice to prevent service from working because there\u0027s a properties reporting issue.  Mention in log warning that the key has been dropped (do a `del` of that key from the dictionary.","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"261693e196133fdb4d8055d9b1eef7d00418af01","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        if vendor_prefix and vendor_prop:"},{"line_number":625,"context_line":"            for key in vendor_prop.keys():"},{"line_number":626,"context_line":"                if key in self.capabilities[\u0027properties\u0027].keys():"},{"line_number":627,"context_line":"                    raise exception.Invalid("},{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"},{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"},{"line_number":630,"context_line":"                        % {\u0027property\u0027: key})"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_1da9f724","line":627,"in_reply_to":"fa1b9901_3de097cc","updated":"2015-08-21 16:14:31.000000000","message":"Done","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a0ec4241cd90b48265445451b050e04315371fb2","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            for key in vendor_prop.keys():"},{"line_number":626,"context_line":"                if key in self.capabilities[\u0027properties\u0027].keys():"},{"line_number":627,"context_line":"                    raise exception.Invalid("},{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"},{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"},{"line_number":630,"context_line":"                        % {\u0027property\u0027: key})"},{"line_number":631,"context_line":"                if not key.startswith(vendor_prefix):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_fd0a1f78","line":628,"updated":"2015-08-21 08:12:16.000000000","message":"nit: It\u0027s more common to use \"cannot\" here instead of \"can not\" since trailing \"not\" is not part of another construct.","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"261693e196133fdb4d8055d9b1eef7d00418af01","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            for key in vendor_prop.keys():"},{"line_number":626,"context_line":"                if key in self.capabilities[\u0027properties\u0027].keys():"},{"line_number":627,"context_line":"                    raise exception.Invalid("},{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"},{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"},{"line_number":630,"context_line":"                        % {\u0027property\u0027: key})"},{"line_number":631,"context_line":"                if not key.startswith(vendor_prefix):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_3da63b54","line":628,"in_reply_to":"fa1b9901_fd0a1f78","updated":"2015-08-21 16:14:31.000000000","message":"Done","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a0ec4241cd90b48265445451b050e04315371fb2","unresolved":false,"context_lines":[{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"},{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"},{"line_number":630,"context_line":"                        % {\u0027property\u0027: key})"},{"line_number":631,"context_line":"                if not key.startswith(vendor_prefix):"},{"line_number":632,"context_line":"                    raise exception.Invalid("},{"line_number":633,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" must start \u0027"},{"line_number":634,"context_line":"                          \u0027with vendor prefix \"%(prefix)s\".\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_bd058746","line":631,"updated":"2015-08-21 08:12:16.000000000","message":"-1: It should start with vendor_prefix + \u0027_\u0027. You can set a variable right before the for loop and use it here.","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"261693e196133fdb4d8055d9b1eef7d00418af01","unresolved":false,"context_lines":[{"line_number":628,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" can not \u0027"},{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"},{"line_number":630,"context_line":"                        % {\u0027property\u0027: key})"},{"line_number":631,"context_line":"                if not key.startswith(vendor_prefix):"},{"line_number":632,"context_line":"                    raise exception.Invalid("},{"line_number":633,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" must start \u0027"},{"line_number":634,"context_line":"                          \u0027with vendor prefix \"%(prefix)s\".\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_dd613f13","line":631,"in_reply_to":"fa1b9901_bd058746","updated":"2015-08-21 16:14:31.000000000","message":"Done","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a0ec4241cd90b48265445451b050e04315371fb2","unresolved":false,"context_lines":[{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"},{"line_number":630,"context_line":"                        % {\u0027property\u0027: key})"},{"line_number":631,"context_line":"                if not key.startswith(vendor_prefix):"},{"line_number":632,"context_line":"                    raise exception.Invalid("},{"line_number":633,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" must start \u0027"},{"line_number":634,"context_line":"                          \u0027with vendor prefix \"%(prefix)s\".\u0027)"},{"line_number":635,"context_line":"                        % {\u0027prefix\u0027: vendor_prefix, \u0027property\u0027: key})"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_3d4df799","line":632,"updated":"2015-08-21 08:12:16.000000000","message":"-1: Same as with line 627","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"261693e196133fdb4d8055d9b1eef7d00418af01","unresolved":false,"context_lines":[{"line_number":629,"context_line":"                          \u0027override cinder standard capabilities.\u0027)"},{"line_number":630,"context_line":"                        % {\u0027property\u0027: key})"},{"line_number":631,"context_line":"                if not key.startswith(vendor_prefix):"},{"line_number":632,"context_line":"                    raise exception.Invalid("},{"line_number":633,"context_line":"                        _(\u0027Vendor unique propeties \"%(property)s\" must start \u0027"},{"line_number":634,"context_line":"                          \u0027with vendor prefix \"%(prefix)s\".\u0027)"},{"line_number":635,"context_line":"                        % {\u0027prefix\u0027: vendor_prefix, \u0027property\u0027: key})"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_bd700bde","line":632,"in_reply_to":"fa1b9901_3d4df799","updated":"2015-08-21 16:14:31.000000000","message":"Done","commit_id":"dcfb827ae552c196e4504d83dcae69f79cb633e4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"abd2d6ac5cdde3996d51a2e2837a08122763010a","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        Vendor unique properties must start with vendor prefix."},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        Each backend driver needs to override this method to expose"},{"line_number":566,"context_line":"        it\u0027s own properties using _set_property() like this:"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        self._set_property("},{"line_number":569,"context_line":"            properties,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_1a7d72e7","line":566,"range":{"start_line":566,"start_character":8,"end_line":566,"end_character":10},"updated":"2015-08-21 20:30:27.000000000","message":"nit: s/it\u0027s/its","commit_id":"3881c1fd33372a5053a1d5a440dbcf826891e0ce"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"b2256d14461d9ec909ce823259fb21232a82695a","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        Vendor unique properties must start with vendor prefix."},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        Each backend driver needs to override this method to expose"},{"line_number":566,"context_line":"        it\u0027s own properties using _set_property() like this:"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        self._set_property("},{"line_number":569,"context_line":"            properties,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_b06ee594","line":566,"in_reply_to":"fa1b9901_1a7d72e7","updated":"2015-08-21 20:50:26.000000000","message":"Done","commit_id":"3881c1fd33372a5053a1d5a440dbcf826891e0ce"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"abd2d6ac5cdde3996d51a2e2837a08122763010a","unresolved":false,"context_lines":[{"line_number":632,"context_line":"                                    \u0027was not registered on capabilities list.\u0027)"},{"line_number":633,"context_line":"                                % {\u0027property\u0027: key})"},{"line_number":634,"context_line":"                    continue"},{"line_number":635,"context_line":"                if not key.startswith(vendor_prefix + \u0027_\u0027):"},{"line_number":636,"context_line":"                    drop_keys.append(key)"},{"line_number":637,"context_line":"                    LOG.warning(_LW(\u0027Vendor unique property \"%(property)s\" \u0027"},{"line_number":638,"context_line":"                                    \u0027must start with vendor prefix \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_3aa95625","line":635,"updated":"2015-08-21 20:30:27.000000000","message":"nit: Better create a variable after line 625 for `vendor_prefix + \u0027_\u0027` and use it here so we don\u0027t create a new string for every iteration.","commit_id":"3881c1fd33372a5053a1d5a440dbcf826891e0ce"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"b2256d14461d9ec909ce823259fb21232a82695a","unresolved":false,"context_lines":[{"line_number":632,"context_line":"                                    \u0027was not registered on capabilities list.\u0027)"},{"line_number":633,"context_line":"                                % {\u0027property\u0027: key})"},{"line_number":634,"context_line":"                    continue"},{"line_number":635,"context_line":"                if not key.startswith(vendor_prefix + \u0027_\u0027):"},{"line_number":636,"context_line":"                    drop_keys.append(key)"},{"line_number":637,"context_line":"                    LOG.warning(_LW(\u0027Vendor unique property \"%(property)s\" \u0027"},{"line_number":638,"context_line":"                                    \u0027must start with vendor prefix \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_9071617a","line":635,"in_reply_to":"fa1b9901_3aa95625","updated":"2015-08-21 20:50:26.000000000","message":"Done","commit_id":"3881c1fd33372a5053a1d5a440dbcf826891e0ce"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"abd2d6ac5cdde3996d51a2e2837a08122763010a","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                    drop_keys.append(key)"},{"line_number":637,"context_line":"                    LOG.warning(_LW(\u0027Vendor unique property \"%(property)s\" \u0027"},{"line_number":638,"context_line":"                                    \u0027must start with vendor prefix \u0027"},{"line_number":639,"context_line":"                                    \u0027\"%(prefix)s\". The property \u0027"},{"line_number":640,"context_line":"                                    \u0027was not registered on capabilities list.\u0027)"},{"line_number":641,"context_line":"                                % {\u0027prefix\u0027: vendor_prefix,"},{"line_number":642,"context_line":"                                   \u0027property\u0027: key})"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_9a2182b7","line":639,"updated":"2015-08-21 20:30:27.000000000","message":"-1: s/%(prefix)s/%(prefix)s_","commit_id":"3881c1fd33372a5053a1d5a440dbcf826891e0ce"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"b2256d14461d9ec909ce823259fb21232a82695a","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                    drop_keys.append(key)"},{"line_number":637,"context_line":"                    LOG.warning(_LW(\u0027Vendor unique property \"%(property)s\" \u0027"},{"line_number":638,"context_line":"                                    \u0027must start with vendor prefix \u0027"},{"line_number":639,"context_line":"                                    \u0027\"%(prefix)s\". The property \u0027"},{"line_number":640,"context_line":"                                    \u0027was not registered on capabilities list.\u0027)"},{"line_number":641,"context_line":"                                % {\u0027prefix\u0027: vendor_prefix,"},{"line_number":642,"context_line":"                                   \u0027property\u0027: key})"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_100471c4","line":639,"in_reply_to":"fa1b9901_9a2182b7","updated":"2015-08-21 20:50:26.000000000","message":"Done","commit_id":"3881c1fd33372a5053a1d5a440dbcf826891e0ce"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a284a9411699143589681de7b80f439784bdd2c9","unresolved":false,"context_lines":[{"line_number":402,"context_line":"            LOG.exception(_LE(\"Detaching snapshot from a remote node \""},{"line_number":403,"context_line":"                              \"is not supported.\"))"},{"line_number":404,"context_line":"            raise exception.NotSupportedOperation("},{"line_number":405,"context_line":"                operation\u003d_(\"detach snapshot from remote node\"))"},{"line_number":406,"context_line":"        else:"},{"line_number":407,"context_line":"            # Call local driver\u0027s terminate_connection and remove export."},{"line_number":408,"context_line":"            # NOTE(avishay) This is copied from the manager\u0027s code - need to"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_6c8e1829","line":405,"updated":"2015-08-24 01:17:05.000000000","message":"Suggest: \"Detach snapshot from remote node.\"","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"b32f7158e4068472ba7068446a4a1e5d79db17b4","unresolved":false,"context_lines":[{"line_number":402,"context_line":"            LOG.exception(_LE(\"Detaching snapshot from a remote node \""},{"line_number":403,"context_line":"                              \"is not supported.\"))"},{"line_number":404,"context_line":"            raise exception.NotSupportedOperation("},{"line_number":405,"context_line":"                operation\u003d_(\"detach snapshot from remote node\"))"},{"line_number":406,"context_line":"        else:"},{"line_number":407,"context_line":"            # Call local driver\u0027s terminate_connection and remove export."},{"line_number":408,"context_line":"            # NOTE(avishay) This is copied from the manager\u0027s code - need to"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_cdb37409","line":405,"in_reply_to":"fa1b9901_13f9b44d","updated":"2015-08-24 20:31:13.000000000","message":"Agree with Gorka here.   This patch isn\u0027t about updating strings for logs or error messages, so this comment isn\u0027t really warranted in this patch.   BUT, it\u0027s a good opportunity to file a bug and push up a patch to fix it yourself Kendall.","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"33ea042c1458d7f047731e6526f3ecd3db9ce3e7","unresolved":false,"context_lines":[{"line_number":402,"context_line":"            LOG.exception(_LE(\"Detaching snapshot from a remote node \""},{"line_number":403,"context_line":"                              \"is not supported.\"))"},{"line_number":404,"context_line":"            raise exception.NotSupportedOperation("},{"line_number":405,"context_line":"                operation\u003d_(\"detach snapshot from remote node\"))"},{"line_number":406,"context_line":"        else:"},{"line_number":407,"context_line":"            # Call local driver\u0027s terminate_connection and remove export."},{"line_number":408,"context_line":"            # NOTE(avishay) This is copied from the manager\u0027s code - need to"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_13f9b44d","line":405,"in_reply_to":"fa1b9901_6c8e1829","updated":"2015-08-24 07:46:32.000000000","message":"Out of the scope of this patch, same as the other comments.  And not even then would these deserve downvoting.","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"40fb9afed6a4b01ba2ef1b7169cb22f87ce867bc","unresolved":false,"context_lines":[{"line_number":402,"context_line":"            LOG.exception(_LE(\"Detaching snapshot from a remote node \""},{"line_number":403,"context_line":"                              \"is not supported.\"))"},{"line_number":404,"context_line":"            raise exception.NotSupportedOperation("},{"line_number":405,"context_line":"                operation\u003d_(\"detach snapshot from remote node\"))"},{"line_number":406,"context_line":"        else:"},{"line_number":407,"context_line":"            # Call local driver\u0027s terminate_connection and remove export."},{"line_number":408,"context_line":"            # NOTE(avishay) This is copied from the manager\u0027s code - need to"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_ad688022","line":405,"in_reply_to":"fa1b9901_6d44a8b6","updated":"2015-08-24 20:39:45.000000000","message":"Thanks, Gorka, Walter, Kendall :)","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"b0244d0846823496d094b9dd07973dc0dd076962","unresolved":false,"context_lines":[{"line_number":402,"context_line":"            LOG.exception(_LE(\"Detaching snapshot from a remote node \""},{"line_number":403,"context_line":"                              \"is not supported.\"))"},{"line_number":404,"context_line":"            raise exception.NotSupportedOperation("},{"line_number":405,"context_line":"                operation\u003d_(\"detach snapshot from remote node\"))"},{"line_number":406,"context_line":"        else:"},{"line_number":407,"context_line":"            # Call local driver\u0027s terminate_connection and remove export."},{"line_number":408,"context_line":"            # NOTE(avishay) This is copied from the manager\u0027s code - need to"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_6d44a8b6","line":405,"in_reply_to":"fa1b9901_cdb37409","updated":"2015-08-24 20:37:39.000000000","message":"Thanks Walt, will do :)","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a284a9411699143589681de7b80f439784bdd2c9","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                self.terminate_connection_snapshot(snapshot, properties,"},{"line_number":412,"context_line":"                                                   force\u003dforce)"},{"line_number":413,"context_line":"            except Exception as err:"},{"line_number":414,"context_line":"                err_msg \u003d (_(\u0027Unable to terminate volume connection: %(err)s\u0027)"},{"line_number":415,"context_line":"                           % {\u0027err\u0027: six.text_type(err)})"},{"line_number":416,"context_line":"                LOG.error(err_msg)"},{"line_number":417,"context_line":"                raise exception.VolumeBackendAPIException(data\u003derr_msg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_cc72c449","line":414,"updated":"2015-08-24 01:17:05.000000000","message":"\".\" at EOL","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"533b3c7262a480c3f5fc6f6dff489ddd9bfba837","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"        # Set static backend capabilities from get_volume_stats()"},{"line_number":616,"context_line":"        self.get_volume_stats(True)"},{"line_number":617,"context_line":"        self.capabilities \u003d self._stats.copy()"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"        # Set cinder standard capabilities"},{"line_number":620,"context_line":"        self.capabilities[\u0027properties\u0027] \u003d self._init_standard_capabilities()"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_7046bf50","line":617,"updated":"2015-08-24 20:51:35.000000000","message":"A few things here:\n1) You are ignoring the return value of get_volume_stats, which is the contract for getting the updated stats and\n2) you are assuming that all drivers are populating self._stats with the stats.   A quick search into the existing drivers and you can see that not all drivers are doing this.","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"97e57ca119d1b72c3fa75159ec67be110402c5de","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"        # Set static backend capabilities from get_volume_stats()"},{"line_number":616,"context_line":"        self.get_volume_stats(True)"},{"line_number":617,"context_line":"        self.capabilities \u003d self._stats.copy()"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"        # Set cinder standard capabilities"},{"line_number":620,"context_line":"        self.capabilities[\u0027properties\u0027] \u003d self._init_standard_capabilities()"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_30a4c7b7","line":617,"in_reply_to":"fa1b9901_7046bf50","updated":"2015-08-24 21:05:58.000000000","message":"I understand. We should copy return value of get_volume_stats() into the self.capabilities. I will check implementation of all vendor driver\u0027s get_volume_stats() just to be make sure. Thanks.","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a284a9411699143589681de7b80f439784bdd2c9","unresolved":false,"context_lines":[{"line_number":942,"context_line":"            except Exception as err:"},{"line_number":943,"context_line":"                try:"},{"line_number":944,"context_line":"                    err_msg \u003d (_(\u0027Unable to fetch connection information from \u0027"},{"line_number":945,"context_line":"                                 \u0027backend: %(err)s\u0027) %"},{"line_number":946,"context_line":"                               {\u0027err\u0027: six.text_type(err)})"},{"line_number":947,"context_line":"                    LOG.error(err_msg)"},{"line_number":948,"context_line":"                    LOG.debug(\"Cleaning up failed connect initialization.\")"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_0cc75c46","line":945,"updated":"2015-08-24 01:17:05.000000000","message":"\".\" at EOL","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a284a9411699143589681de7b80f439784bdd2c9","unresolved":false,"context_lines":[{"line_number":949,"context_line":"                    self.remove_export_snapshot(context, snapshot)"},{"line_number":950,"context_line":"                except Exception as ex:"},{"line_number":951,"context_line":"                    ex_msg \u003d (_(\u0027Error encountered during cleanup \u0027"},{"line_number":952,"context_line":"                                \u0027of a failed attach: %(ex)s\u0027) %"},{"line_number":953,"context_line":"                              {\u0027ex\u0027: six.text_type(ex)})"},{"line_number":954,"context_line":"                    LOG.error(err_msg)"},{"line_number":955,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dex_msg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_2cafc07e","line":952,"updated":"2015-08-24 01:17:05.000000000","message":"\".\" at EOL","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7cc72189374636f4f2a39da015d7efe02ef50af6","unresolved":false,"context_lines":[{"line_number":559,"context_line":"        \"\"\"Create a dictionary of vendor unique properties."},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"        This method creates a dictionary of vendor unique properties"},{"line_number":562,"context_line":"        and returns both created dictionary and vendor prefix."},{"line_number":563,"context_line":"        Vendor unique properties must start with vendor prefix."},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        Each backend driver needs to override this method to expose"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa1b9901_13fe5138","line":562,"updated":"2015-08-25 11:50:57.000000000","message":"nit: s/prefix/name","commit_id":"5fa498fd14239fa6807ba7b2e9449b0736ea7c8d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7cc72189374636f4f2a39da015d7efe02ef50af6","unresolved":false,"context_lines":[{"line_number":560,"context_line":""},{"line_number":561,"context_line":"        This method creates a dictionary of vendor unique properties"},{"line_number":562,"context_line":"        and returns both created dictionary and vendor prefix."},{"line_number":563,"context_line":"        Vendor unique properties must start with vendor prefix."},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"        Each backend driver needs to override this method to expose"},{"line_number":566,"context_line":"        its own properties using _set_property() like this:"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa1b9901_56cd97b5","line":563,"updated":"2015-08-25 11:50:57.000000000","message":"nit: You haven\u0027t explained anywhere what this vendor prefix is: vendor name + separator.\n\nIt would be good to mention any restrictions that this vendor name has (for example if it must be lowercase and contain no spaces).","commit_id":"5fa498fd14239fa6807ba7b2e9449b0736ea7c8d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7cc72189374636f4f2a39da015d7efe02ef50af6","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        vendor_prop, vendor_name \u003d self._init_vendor_properties()"},{"line_number":625,"context_line":"        if vendor_name and vendor_prop:"},{"line_number":626,"context_line":"            drop_keys \u003d []"},{"line_number":627,"context_line":"            vendor_prefix \u003d vendor_name + \u0027_\u0027"},{"line_number":628,"context_line":"            for key in vendor_prop:"},{"line_number":629,"context_line":"                if key in self.capabilities[\u0027properties\u0027]:"},{"line_number":630,"context_line":"                    drop_keys.append(key)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa1b9901_36b023dd","line":627,"updated":"2015-08-25 11:50:57.000000000","message":"-1: Looking a the Specs I see that separator was agreed as \u0027:\u0027 not \u0027_\u0027.  Docstrings, tests and commit message should also be changed.","commit_id":"5fa498fd14239fa6807ba7b2e9449b0736ea7c8d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d22da58d1111e0d4b3708a929b1a05018b6a9702","unresolved":false,"context_lines":[{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        # Set Vendor unique properties"},{"line_number":664,"context_line":"        vendor_prop, vendor_name \u003d self._init_vendor_properties()"},{"line_number":665,"context_line":"        if vendor_name and vendor_prop:"},{"line_number":666,"context_line":"            drop_keys \u003d []"},{"line_number":667,"context_line":"            if \u0027:\u0027 in vendor_name:"},{"line_number":668,"context_line":"                vendor_name \u003d vendor_name.replace(\u0027:\u0027, \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_a1e75d3f","line":665,"updated":"2015-08-27 09:26:12.000000000","message":"?: jgriffith mentioned adding vendor_prefix to capabilities, have you given some thought to that idea?","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"6d72a432f81b4c8b365f398d291dd271d123c40a","unresolved":false,"context_lines":[{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        # Set Vendor unique properties"},{"line_number":664,"context_line":"        vendor_prop, vendor_name \u003d self._init_vendor_properties()"},{"line_number":665,"context_line":"        if vendor_name and vendor_prop:"},{"line_number":666,"context_line":"            drop_keys \u003d []"},{"line_number":667,"context_line":"            if \u0027:\u0027 in vendor_name:"},{"line_number":668,"context_line":"                vendor_name \u003d vendor_name.replace(\u0027:\u0027, \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_63860967","line":665,"in_reply_to":"da20952f_a1e75d3f","updated":"2015-08-27 19:36:30.000000000","message":"I added get_prefixed_property() and stored vendor prefix in self.capabilities[\u0027vendor_prefix\u0027]. \n\nI think this is one of solution for vendor drivers to get prefixed extra spec from extra spec list using unprefixed keys which now drivers have.\n\nex.\nextra_spec.get(get_prefixed_property(\u0027key\u0027))\n\nany thought?","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d22da58d1111e0d4b3708a929b1a05018b6a9702","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        if vendor_name and vendor_prop:"},{"line_number":666,"context_line":"            drop_keys \u003d []"},{"line_number":667,"context_line":"            if \u0027:\u0027 in vendor_name:"},{"line_number":668,"context_line":"                vendor_name \u003d vendor_name.replace(\u0027:\u0027, \u0027_\u0027)"},{"line_number":669,"context_line":"                LOG.warning(_LW(\u0027The colon in vendor name is replaced \u0027"},{"line_number":670,"context_line":"                                \u0027by underscore. Updated vendor name is \u0027"},{"line_number":671,"context_line":"                                \u0027%(name)s\".\u0027) % {\u0027name\u0027: vendor_name})"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_dee7d010","line":668,"updated":"2015-08-27 09:26:12.000000000","message":"-1: You also need to replace all keys from vendor_prop, otherwise you\u0027ll be dropping all the keys.","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"6d72a432f81b4c8b365f398d291dd271d123c40a","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        if vendor_name and vendor_prop:"},{"line_number":666,"context_line":"            drop_keys \u003d []"},{"line_number":667,"context_line":"            if \u0027:\u0027 in vendor_name:"},{"line_number":668,"context_line":"                vendor_name \u003d vendor_name.replace(\u0027:\u0027, \u0027_\u0027)"},{"line_number":669,"context_line":"                LOG.warning(_LW(\u0027The colon in vendor name is replaced \u0027"},{"line_number":670,"context_line":"                                \u0027by underscore. Updated vendor name is \u0027"},{"line_number":671,"context_line":"                                \u0027%(name)s\".\u0027) % {\u0027name\u0027: vendor_name})"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_00b70387","line":668,"in_reply_to":"da20952f_dee7d010","updated":"2015-08-27 19:36:30.000000000","message":"Done","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d22da58d1111e0d4b3708a929b1a05018b6a9702","unresolved":false,"context_lines":[{"line_number":668,"context_line":"                vendor_name \u003d vendor_name.replace(\u0027:\u0027, \u0027_\u0027)"},{"line_number":669,"context_line":"                LOG.warning(_LW(\u0027The colon in vendor name is replaced \u0027"},{"line_number":670,"context_line":"                                \u0027by underscore. Updated vendor name is \u0027"},{"line_number":671,"context_line":"                                \u0027%(name)s\".\u0027) % {\u0027name\u0027: vendor_name})"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"            vendor_prefix \u003d vendor_name + \u0027:\u0027"},{"line_number":674,"context_line":"            for key in vendor_prop:"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_3e9e0c57","line":671,"updated":"2015-08-27 09:26:12.000000000","message":"-1: This doesn\u0027t follow logging guidelines, we should be doing delayed string interpolation.","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"6d72a432f81b4c8b365f398d291dd271d123c40a","unresolved":false,"context_lines":[{"line_number":668,"context_line":"                vendor_name \u003d vendor_name.replace(\u0027:\u0027, \u0027_\u0027)"},{"line_number":669,"context_line":"                LOG.warning(_LW(\u0027The colon in vendor name is replaced \u0027"},{"line_number":670,"context_line":"                                \u0027by underscore. Updated vendor name is \u0027"},{"line_number":671,"context_line":"                                \u0027%(name)s\".\u0027) % {\u0027name\u0027: vendor_name})"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"            vendor_prefix \u003d vendor_name + \u0027:\u0027"},{"line_number":674,"context_line":"            for key in vendor_prop:"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_60c03fe1","line":671,"in_reply_to":"da20952f_3e9e0c57","updated":"2015-08-27 19:36:30.000000000","message":"Done","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d22da58d1111e0d4b3708a929b1a05018b6a9702","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                    LOG.warning(_LW(\u0027Vendor unique property \"%(property)s\" \u0027"},{"line_number":678,"context_line":"                                    \u0027cannot override cinder standard \u0027"},{"line_number":679,"context_line":"                                    \u0027capabilities. The property \u0027"},{"line_number":680,"context_line":"                                    \u0027was not registered on capabilities list.\u0027)"},{"line_number":681,"context_line":"                                % {\u0027property\u0027: key})"},{"line_number":682,"context_line":"                    continue"},{"line_number":683,"context_line":"                if not key.startswith(vendor_prefix):"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_fe517463","line":680,"updated":"2015-08-27 09:26:12.000000000","message":"-1: Delayed string interpolation","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"6d72a432f81b4c8b365f398d291dd271d123c40a","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                    LOG.warning(_LW(\u0027Vendor unique property \"%(property)s\" \u0027"},{"line_number":678,"context_line":"                                    \u0027cannot override cinder standard \u0027"},{"line_number":679,"context_line":"                                    \u0027capabilities. The property \u0027"},{"line_number":680,"context_line":"                                    \u0027was not registered on capabilities list.\u0027)"},{"line_number":681,"context_line":"                                % {\u0027property\u0027: key})"},{"line_number":682,"context_line":"                    continue"},{"line_number":683,"context_line":"                if not key.startswith(vendor_prefix):"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_e0852fad","line":680,"in_reply_to":"da20952f_fe517463","updated":"2015-08-27 19:36:30.000000000","message":"Done","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d22da58d1111e0d4b3708a929b1a05018b6a9702","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                    LOG.warning(_LW(\u0027Vendor unique property \"%(property)s\" \u0027"},{"line_number":686,"context_line":"                                    \u0027must start with vendor prefix \u0027"},{"line_number":687,"context_line":"                                    \u0027\"%(prefix)s\". The property \u0027"},{"line_number":688,"context_line":"                                    \u0027was not registered on capabilities list.\u0027)"},{"line_number":689,"context_line":"                                % {\u0027prefix\u0027: vendor_prefix,"},{"line_number":690,"context_line":"                                   \u0027property\u0027: key})"},{"line_number":691,"context_line":"            for key in drop_keys:"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_5ec74012","line":688,"updated":"2015-08-27 09:26:12.000000000","message":"-1: Delayed string interpolation","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"6d72a432f81b4c8b365f398d291dd271d123c40a","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                    LOG.warning(_LW(\u0027Vendor unique property \"%(property)s\" \u0027"},{"line_number":686,"context_line":"                                    \u0027must start with vendor prefix \u0027"},{"line_number":687,"context_line":"                                    \u0027\"%(prefix)s\". The property \u0027"},{"line_number":688,"context_line":"                                    \u0027was not registered on capabilities list.\u0027)"},{"line_number":689,"context_line":"                                % {\u0027prefix\u0027: vendor_prefix,"},{"line_number":690,"context_line":"                                   \u0027property\u0027: key})"},{"line_number":691,"context_line":"            for key in drop_keys:"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_20a32751","line":688,"in_reply_to":"da20952f_5ec74012","updated":"2015-08-27 19:36:30.000000000","message":"Done","commit_id":"574117853268ea8c2abe26371d0c7899dd176f90"},{"author":{"_account_id":17718,"name":"Lallana","email":"gaozhiqiang2@huawei.com","username":"Lallana"},"change_message_id":"f0332b4c20f7e5feff7e7c30cb31f4355a220dcb","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                if tries \u003e\u003d self.configuration.num_shell_tries or\\"},{"line_number":371,"context_line":"                        self._is_non_recoverable(ex.stderr, non_recoverable):"},{"line_number":372,"context_line":"                    raise"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"                LOG.exception(_LE(\"Recovering from a failed execute.  \""},{"line_number":375,"context_line":"                                  \"Try number %s\"), tries)"},{"line_number":376,"context_line":"                time.sleep(tries ** 2)"}],"source_content_type":"text/x-python","patch_set":27,"id":"da20952f_203d1ec4","line":373,"updated":"2015-08-29 02:18:40.000000000","message":"Should have only 1 space between sentences.","commit_id":"0e2783360ce730beed3423bee31ad9726a51c8e1"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"58d2db48e72564a43b3ba85c2437315444798cc8","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                if tries \u003e\u003d self.configuration.num_shell_tries or\\"},{"line_number":371,"context_line":"                        self._is_non_recoverable(ex.stderr, non_recoverable):"},{"line_number":372,"context_line":"                    raise"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"                LOG.exception(_LE(\"Recovering from a failed execute.  \""},{"line_number":375,"context_line":"                                  \"Try number %s\"), tries)"},{"line_number":376,"context_line":"                time.sleep(tries ** 2)"}],"source_content_type":"text/x-python","patch_set":27,"id":"da20952f_73a2f79a","line":373,"in_reply_to":"da20952f_203d1ec4","updated":"2015-08-31 02:55:52.000000000","message":"Thank you for your review but this comment is reviewing out of the scope of this patch.","commit_id":"0e2783360ce730beed3423bee31ad9726a51c8e1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"08a2689881bf11b38bf02231de6b4eadb36bbc20","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            self.capabilities[\u0027vendor_prefix\u0027] \u003d vendor_name"},{"line_number":707,"context_line":"            self.capabilities[\u0027properties\u0027].update(updated_vendor_prop)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        LOG.debug(\"Initialized capabilities list: %s.\", self.capabilities)"},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"    def _update_pools_and_stats(self, data):"},{"line_number":712,"context_line":"        \"\"\"Updates data for pools and volume stats based on provided data.\"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"da20952f_5a0dbf35","line":709,"updated":"2015-08-28 13:34:17.000000000","message":"nit: Potential problem if capabilities has unicode char, although it is unlikely","commit_id":"0e2783360ce730beed3423bee31ad9726a51c8e1"}],"cinder/volume/manager.py":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a5330179e44193952618c538a95d9815272e0aad","unresolved":false,"context_lines":[{"line_number":2608,"context_line":"            self.db.volume_update(ctxt.elevated(), volume[\u0027id\u0027],"},{"line_number":2609,"context_line":"                                  model_update)"},{"line_number":2610,"context_line":""},{"line_number":2611,"context_line":"    def get_capabilities(self, context, discover):"},{"line_number":2612,"context_line":"        \"\"\"Get capabilities of backend storage.\"\"\""},{"line_number":2613,"context_line":"        if discover:"},{"line_number":2614,"context_line":"            self.driver.init_capabilities()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_484eccc2","line":2611,"updated":"2015-07-20 02:32:39.000000000","message":"This method can have a test case to cover.","commit_id":"62172bb61d65f0250010b14f32d93efee004369c"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4f470975dbab762a4162bb287150ccfdebb3e69c","unresolved":false,"context_lines":[{"line_number":2608,"context_line":"            self.db.volume_update(ctxt.elevated(), volume[\u0027id\u0027],"},{"line_number":2609,"context_line":"                                  model_update)"},{"line_number":2610,"context_line":""},{"line_number":2611,"context_line":"    def get_capabilities(self, context, discover):"},{"line_number":2612,"context_line":"        \"\"\"Get capabilities of backend storage.\"\"\""},{"line_number":2613,"context_line":"        if discover:"},{"line_number":2614,"context_line":"            self.driver.init_capabilities()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_f4eae0ab","line":2611,"in_reply_to":"3a50d1a3_484eccc2","updated":"2015-07-20 21:48:03.000000000","message":"Done. Thank you for catching up.","commit_id":"62172bb61d65f0250010b14f32d93efee004369c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a5330179e44193952618c538a95d9815272e0aad","unresolved":false,"context_lines":[{"line_number":2613,"context_line":"        if discover:"},{"line_number":2614,"context_line":"            self.driver.init_capabilities()"},{"line_number":2615,"context_line":"        capabilities \u003d self.driver.capabilities"},{"line_number":2616,"context_line":"        LOG.debug(\"Obtained capabilities list: %s\", capabilities)"},{"line_number":2617,"context_line":"        return capabilities"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_e85eb875","line":2616,"updated":"2015-07-20 02:32:39.000000000","message":"Put \u0027.\u0027 EOL.","commit_id":"62172bb61d65f0250010b14f32d93efee004369c"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4f470975dbab762a4162bb287150ccfdebb3e69c","unresolved":false,"context_lines":[{"line_number":2613,"context_line":"        if discover:"},{"line_number":2614,"context_line":"            self.driver.init_capabilities()"},{"line_number":2615,"context_line":"        capabilities \u003d self.driver.capabilities"},{"line_number":2616,"context_line":"        LOG.debug(\"Obtained capabilities list: %s\", capabilities)"},{"line_number":2617,"context_line":"        return capabilities"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_342fe8f7","line":2616,"in_reply_to":"3a50d1a3_e85eb875","updated":"2015-07-20 21:48:03.000000000","message":"The capabilities includes long dictionary which I mentioned in commit message, so I think period is unnecessary here.","commit_id":"62172bb61d65f0250010b14f32d93efee004369c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"ac86c4326977e68793ff9293ffaa448217118381","unresolved":false,"context_lines":[{"line_number":2613,"context_line":"        if discover:"},{"line_number":2614,"context_line":"            self.driver.init_capabilities()"},{"line_number":2615,"context_line":"        capabilities \u003d self.driver.capabilities"},{"line_number":2616,"context_line":"        LOG.debug(\"Obtained capabilities list: %s\", capabilities)"},{"line_number":2617,"context_line":"        return capabilities"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_deab3ad5","line":2616,"updated":"2015-07-21 02:54:55.000000000","message":"\u0027.\u0027 EOL.","commit_id":"fc1af646c675bfabb3cb2f8302b9b63850dcc256"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"68d8c083906254d5d5154b9f51eef2e78b2f9ee9","unresolved":false,"context_lines":[{"line_number":2613,"context_line":"        if discover:"},{"line_number":2614,"context_line":"            self.driver.init_capabilities()"},{"line_number":2615,"context_line":"        capabilities \u003d self.driver.capabilities"},{"line_number":2616,"context_line":"        LOG.debug(\"Obtained capabilities list: %s\", capabilities)"},{"line_number":2617,"context_line":"        return capabilities"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_02d8471c","line":2616,"in_reply_to":"3a50d1a3_deab3ad5","updated":"2015-07-21 14:25:09.000000000","message":"The capabilities includes long dictionary which I mentioned in commit message, so I think period is unnecessary here.","commit_id":"fc1af646c675bfabb3cb2f8302b9b63850dcc256"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"1a8f10e214b82edcdf537c3349454e5f1fc8a981","unresolved":false,"context_lines":[{"line_number":2692,"context_line":"        if discover:"},{"line_number":2693,"context_line":"            self.driver.init_capabilities()"},{"line_number":2694,"context_line":"        capabilities \u003d self.driver.capabilities"},{"line_number":2695,"context_line":"        LOG.debug(\"Obtained capabilities list: %s\", capabilities)"},{"line_number":2696,"context_line":"        return capabilities"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_d828d535","line":2695,"updated":"2015-08-06 05:00:00.000000000","message":"Add \u0027.\u0027 in the end","commit_id":"6ff98d1f6a4ff8463614d56d901ee2e84e017234"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"32899bc4f9c339a28dd9614763cbc1e91374b9f9","unresolved":false,"context_lines":[{"line_number":2692,"context_line":"        if discover:"},{"line_number":2693,"context_line":"            self.driver.init_capabilities()"},{"line_number":2694,"context_line":"        capabilities \u003d self.driver.capabilities"},{"line_number":2695,"context_line":"        LOG.debug(\"Obtained capabilities list: %s\", capabilities)"},{"line_number":2696,"context_line":"        return capabilities"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_9d021b09","line":2695,"in_reply_to":"1a4dcd0f_d828d535","updated":"2015-08-06 16:41:51.000000000","message":"Done","commit_id":"6ff98d1f6a4ff8463614d56d901ee2e84e017234"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"a284a9411699143589681de7b80f439784bdd2c9","unresolved":false,"context_lines":[{"line_number":1427,"context_line":"            rpcapi.delete_volume(ctxt, updated_new)"},{"line_number":1428,"context_line":"        except Exception as ex:"},{"line_number":1429,"context_line":"            LOG.error(_LE(\u0027Failed to request async delete of migration source \u0027"},{"line_number":1430,"context_line":"                          \u0027vol %(vol)s: %(err)s\u0027),"},{"line_number":1431,"context_line":"                      {\u0027vol\u0027: volume_id, \u0027err\u0027: ex})"},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"        LOG.info(_LI(\"Complete-Migrate volume completed successfully.\"),"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_0cce7c5a","line":1430,"updated":"2015-08-24 01:17:05.000000000","message":"\".\" at EOL","commit_id":"57038138fe12d2466e268fa1d039a3de85faf54b"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"ed9ea30b988875f3db246586975dfb8052b0263b","unresolved":false,"context_lines":[{"line_number":3070,"context_line":"            flow_engine.run()"},{"line_number":3071,"context_line":"        return snapshot.id"},{"line_number":3072,"context_line":""},{"line_number":3073,"context_line":"    def get_capabilities(self, context, discover):"},{"line_number":3074,"context_line":"        \"\"\"Get capabilities of backend storage.\"\"\""},{"line_number":3075,"context_line":"        if discover:"},{"line_number":3076,"context_line":"            self.driver.init_capabilities()"}],"source_content_type":"text/x-python","patch_set":27,"id":"da20952f_f2996a20","line":3073,"updated":"2015-08-28 09:01:39.000000000","message":"IMO, it would be better to pass discover\u003dFalse","commit_id":"0e2783360ce730beed3423bee31ad9726a51c8e1"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"a5330179e44193952618c538a95d9815272e0aad","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               and delete_snapshot()"},{"line_number":64,"context_line":"        1.21 - Adds update_consistencygroup."},{"line_number":65,"context_line":"        1.22 - Adds create_consistencygroup_from_src."},{"line_number":66,"context_line":"        1.23 - Adds attachment_id to detach_volume"},{"line_number":67,"context_line":"    \u0027\u0027\u0027"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_c8597c90","line":66,"updated":"2015-07-20 02:32:39.000000000","message":"Add a line of comment here for 1.24.","commit_id":"62172bb61d65f0250010b14f32d93efee004369c"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"4f470975dbab762a4162bb287150ccfdebb3e69c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               and delete_snapshot()"},{"line_number":64,"context_line":"        1.21 - Adds update_consistencygroup."},{"line_number":65,"context_line":"        1.22 - Adds create_consistencygroup_from_src."},{"line_number":66,"context_line":"        1.23 - Adds attachment_id to detach_volume"},{"line_number":67,"context_line":"    \u0027\u0027\u0027"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_34e128d1","line":66,"in_reply_to":"3a50d1a3_c8597c90","updated":"2015-07-20 21:48:03.000000000","message":"Done","commit_id":"62172bb61d65f0250010b14f32d93efee004369c"}]}
