)]}'
{"cinder/tests/test_hitachi_hbsd_horcm_fc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94bcf19d1ad9f6939868c7f9c60564763a3204bc","unresolved":false,"context_lines":[{"line_number":684,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":685,"context_line":"        \"\"\"test manage_existing.\"\"\""},{"line_number":686,"context_line":"        self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":687,"context_line":"        return"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":690,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027exec_raidcom\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_567228e4","line":687,"updated":"2014-12-29 05:37:18.000000000","message":"\"return\" can be removed.","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"520f7586e0368d3ab866f16da7d874083cabe0c4","unresolved":false,"context_lines":[{"line_number":684,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":685,"context_line":"        \"\"\"test manage_existing.\"\"\""},{"line_number":686,"context_line":"        self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":687,"context_line":"        return"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":690,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027exec_raidcom\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_99012309","line":687,"in_reply_to":"3a961159_567228e4","updated":"2014-12-29 08:14:55.000000000","message":"Done","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94bcf19d1ad9f6939868c7f9c60564763a3204bc","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        self.assertRaises(exception.ManageExistingInvalidReference,"},{"line_number":705,"context_line":"                          self.driver.manage_existing_get_size, self._VOLUME,"},{"line_number":706,"context_line":"                          self.test_existing_invalid_ldev_ref)"},{"line_number":707,"context_line":"        return"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":710,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027exec_raidcom\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_767f24ac","line":707,"updated":"2014-12-29 05:37:18.000000000","message":"Same here.","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"520f7586e0368d3ab866f16da7d874083cabe0c4","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        self.assertRaises(exception.ManageExistingInvalidReference,"},{"line_number":705,"context_line":"                          self.driver.manage_existing_get_size, self._VOLUME,"},{"line_number":706,"context_line":"                          self.test_existing_invalid_ldev_ref)"},{"line_number":707,"context_line":"        return"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":710,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027exec_raidcom\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_c4fd820a","line":707,"in_reply_to":"3a961159_767f24ac","updated":"2014-12-29 08:14:55.000000000","message":"Done","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94bcf19d1ad9f6939868c7f9c60564763a3204bc","unresolved":false,"context_lines":[{"line_number":715,"context_line":"        self.assertRaises(exception.ManageExistingInvalidReference,"},{"line_number":716,"context_line":"                          self.driver.manage_existing_get_size, self._VOLUME,"},{"line_number":717,"context_line":"                          self.test_existing_no_ldev_ref)"},{"line_number":718,"context_line":"        return"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":721,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027start_horcm\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_967c90b7","line":718,"updated":"2014-12-29 05:37:18.000000000","message":"Same.","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"520f7586e0368d3ab866f16da7d874083cabe0c4","unresolved":false,"context_lines":[{"line_number":715,"context_line":"        self.assertRaises(exception.ManageExistingInvalidReference,"},{"line_number":716,"context_line":"                          self.driver.manage_existing_get_size, self._VOLUME,"},{"line_number":717,"context_line":"                          self.test_existing_no_ldev_ref)"},{"line_number":718,"context_line":"        return"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":721,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027start_horcm\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_e4027e08","line":718,"in_reply_to":"3a961159_967c90b7","updated":"2014-12-29 08:14:55.000000000","message":"Done","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94bcf19d1ad9f6939868c7f9c60564763a3204bc","unresolved":false,"context_lines":[{"line_number":736,"context_line":"        \"\"\"test unmanage.\"\"\""},{"line_number":737,"context_line":"        self.assertRaises(exception.HBSDVolumeIsBusy,"},{"line_number":738,"context_line":"                          self.driver.unmanage, self.test_volume_error3)"},{"line_number":739,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_365cbc4c","line":739,"updated":"2014-12-29 05:37:18.000000000","message":"Same.","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"520f7586e0368d3ab866f16da7d874083cabe0c4","unresolved":false,"context_lines":[{"line_number":736,"context_line":"        \"\"\"test unmanage.\"\"\""},{"line_number":737,"context_line":"        self.assertRaises(exception.HBSDVolumeIsBusy,"},{"line_number":738,"context_line":"                          self.driver.unmanage, self.test_volume_error3)"},{"line_number":739,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_04086a27","line":739,"in_reply_to":"3a961159_365cbc4c","updated":"2014-12-29 08:14:55.000000000","message":"Done","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"c1701c0fc4bcd8747cd90576c81d5029051e87b4","unresolved":false,"context_lines":[{"line_number":683,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027exec_raidcom\u0027,"},{"line_number":684,"context_line":"                       side_effect\u003d_exec_raidcom)"},{"line_number":685,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":686,"context_line":"        \"\"\"test manage_existing.\"\"\""},{"line_number":687,"context_line":"        rc \u003d self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":688,"context_line":"        self.assertEqual(1, rc[\u0027provider_location\u0027])"},{"line_number":689,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_a126a9b8","line":686,"updated":"2015-01-28 15:04:01.000000000","message":"I think it\u0027s okay to leave out docstrings from test cases","commit_id":"56f648b3974de237d01e54e56af648b6b88b959e"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"aedc021fcaba525d077dfaf5a7f9e7eae3e02d8f","unresolved":false,"context_lines":[{"line_number":683,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027exec_raidcom\u0027,"},{"line_number":684,"context_line":"                       side_effect\u003d_exec_raidcom)"},{"line_number":685,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":686,"context_line":"        \"\"\"test manage_existing.\"\"\""},{"line_number":687,"context_line":"        rc \u003d self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":688,"context_line":"        self.assertEqual(1, rc[\u0027provider_location\u0027])"},{"line_number":689,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_948472d5","line":686,"in_reply_to":"da86d52c_2dac63a0","updated":"2015-02-02 18:05:49.000000000","message":"Done","commit_id":"56f648b3974de237d01e54e56af648b6b88b959e"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"987ebe4649920b90e709e9c25a6fa020fac123c3","unresolved":false,"context_lines":[{"line_number":683,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027exec_raidcom\u0027,"},{"line_number":684,"context_line":"                       side_effect\u003d_exec_raidcom)"},{"line_number":685,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":686,"context_line":"        \"\"\"test manage_existing.\"\"\""},{"line_number":687,"context_line":"        rc \u003d self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":688,"context_line":"        self.assertEqual(1, rc[\u0027provider_location\u0027])"},{"line_number":689,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_2dac63a0","line":686,"in_reply_to":"fa81d914_a126a9b8","updated":"2015-02-02 15:30:14.000000000","message":"Agree","commit_id":"56f648b3974de237d01e54e56af648b6b88b959e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"697443bc14002f1456922138dedc44f99709f3b2","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                            \u0027volume\u0027: _VOLUME,"},{"line_number":352,"context_line":"                            \u0027provider_location\u0027: \u00271\u0027, \u0027status\u0027: \u0027available\u0027}"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    test_existing_ref \u003d {\u0027ldev\u0027: \u00271\u0027, \u0027serial_number\u0027: \"None\"}"},{"line_number":355,"context_line":"    test_existing_none_ldev_ref \u003d {\u0027ldev\u0027: None, \u0027serial_number\u0027: \"None\"}"},{"line_number":356,"context_line":"    test_existing_invalid_ldev_ref \u003d {\u0027ldev\u0027: \u0027AAA\u0027, \u0027serial_number\u0027: \"None\"}"},{"line_number":357,"context_line":"    test_existing_no_ldev_ref \u003d {\u0027serial_number\u0027: \"None\"}"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_4b5171d7","line":354,"updated":"2015-02-02 19:45:22.000000000","message":"When testing an existing ref, shouldn\u0027t the \u0027serial_number\u0027 be not None? Can you add a valid test when serial_number is not None?","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"5177b5fe54b53286af69a6a577acc80e4e8f3780","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                            \u0027volume\u0027: _VOLUME,"},{"line_number":352,"context_line":"                            \u0027provider_location\u0027: \u00271\u0027, \u0027status\u0027: \u0027available\u0027}"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    test_existing_ref \u003d {\u0027ldev\u0027: \u00271\u0027, \u0027serial_number\u0027: \"None\"}"},{"line_number":355,"context_line":"    test_existing_none_ldev_ref \u003d {\u0027ldev\u0027: None, \u0027serial_number\u0027: \"None\"}"},{"line_number":356,"context_line":"    test_existing_invalid_ldev_ref \u003d {\u0027ldev\u0027: \u0027AAA\u0027, \u0027serial_number\u0027: \"None\"}"},{"line_number":357,"context_line":"    test_existing_no_ldev_ref \u003d {\u0027serial_number\u0027: \"None\"}"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_baf4f8f2","line":354,"in_reply_to":"da86d52c_4b5171d7","updated":"2015-02-02 20:26:50.000000000","message":"In this unit tests, serial_number is initialized to  \"None\" at the line 392.\nSo, this existing_ref is correct.","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"35793ca572b2b4ccee86572dfad3ae3da987407a","unresolved":false,"context_lines":[{"line_number":683,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027exec_raidcom\u0027,"},{"line_number":684,"context_line":"                       side_effect\u003d_exec_raidcom)"},{"line_number":685,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":686,"context_line":"        rc \u003d self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":687,"context_line":"        self.assertEqual(1, rc[\u0027provider_location\u0027])"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_e4808f48","line":686,"updated":"2015-02-02 23:26:00.000000000","message":"Here is why I added that comment on line 354. \n\nBased on my reading of the code, this manage_existing() should call the following get_ldev_size_in_gigabyte() in hbsd_horcm.py.  If \u0027serial_number\u0027 is not in existing_ref, it will throw an exception. That\u0027s why I believe \u0027serial_number\u0027 should not be None for a successful test case. I don\u0027t know why the exception is not raised when \u0027serial_number\u0027 is None.\n\nAm I missing anything here?\n\nhttps://review.openstack.org/#/c/141315/8/cinder/volume/drivers/hitachi/hbsd_horcm.py\n\n    def get_ldev_size_in_gigabyte(self, ldev, existing_ref):\n        param \u003d \u0027serial_number\u0027\n\n        if param not in existing_ref:\n            msg \u003d basic_lib.output_err(700, param\u003dparam)\n            raise exception.HBSDError(data\u003dmsg)","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"b39ca8f93d214ff88013b17e98754f016182497f","unresolved":false,"context_lines":[{"line_number":683,"context_line":"    @mock.patch.object(hbsd_horcm.HBSDHORCM, \u0027exec_raidcom\u0027,"},{"line_number":684,"context_line":"                       side_effect\u003d_exec_raidcom)"},{"line_number":685,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":686,"context_line":"        rc \u003d self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":687,"context_line":"        self.assertEqual(1, rc[\u0027provider_location\u0027])"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_d51cf279","line":686,"in_reply_to":"da86d52c_e4808f48","updated":"2015-02-03 17:51:27.000000000","message":"I will change the serial_number from \"None\" to some valid value.\nAlso, I will implement additional unit tests for increasing coverage.","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"}],"cinder/tests/test_hitachi_hbsd_snm2_fc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94bcf19d1ad9f6939868c7f9c60564763a3204bc","unresolved":false,"context_lines":[{"line_number":396,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":397,"context_line":"        \"\"\"test manage_existing.\"\"\""},{"line_number":398,"context_line":"        self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":399,"context_line":"        return"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":402,"context_line":"    @mock.patch.object(hbsd_snm2.HBSDSNM2, \u0027exec_hsnm\u0027, side_effect\u003d_exec_hsnm)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_7656442c","line":399,"updated":"2014-12-29 05:37:18.000000000","message":"\"return\" can be removed. Same with the other places.","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"520f7586e0368d3ab866f16da7d874083cabe0c4","unresolved":false,"context_lines":[{"line_number":396,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":397,"context_line":"        \"\"\"test manage_existing.\"\"\""},{"line_number":398,"context_line":"        self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":399,"context_line":"        return"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":402,"context_line":"    @mock.patch.object(hbsd_snm2.HBSDSNM2, \u0027exec_hsnm\u0027, side_effect\u003d_exec_hsnm)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_240d6638","line":399,"in_reply_to":"3a961159_7656442c","updated":"2014-12-29 08:14:55.000000000","message":"Done","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"}],"cinder/tests/test_hitachi_hbsd_snm2_iscsi.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94bcf19d1ad9f6939868c7f9c60564763a3204bc","unresolved":false,"context_lines":[{"line_number":506,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":507,"context_line":"        \"\"\"test manage_existing.\"\"\""},{"line_number":508,"context_line":"        self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":509,"context_line":"        return"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":512,"context_line":"    @mock.patch.object(hbsd_snm2.HBSDSNM2, \u0027exec_hsnm\u0027, side_effect\u003d_exec_hsnm)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_9653b038","line":509,"updated":"2014-12-29 05:37:18.000000000","message":"\"return\" can be removed. Same with other places.","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"520f7586e0368d3ab866f16da7d874083cabe0c4","unresolved":false,"context_lines":[{"line_number":506,"context_line":"    def test_manage_existing(self, arg1, arg2):"},{"line_number":507,"context_line":"        \"\"\"test manage_existing.\"\"\""},{"line_number":508,"context_line":"        self.driver.manage_existing(self._VOLUME, self.test_existing_ref)"},{"line_number":509,"context_line":"        return"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    @mock.patch.object(hbsd_basiclib, \u0027get_process_lock\u0027)"},{"line_number":512,"context_line":"    @mock.patch.object(hbsd_snm2.HBSDSNM2, \u0027exec_hsnm\u0027, side_effect\u003d_exec_hsnm)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_640e8e34","line":509,"in_reply_to":"3a961159_9653b038","updated":"2014-12-29 08:14:55.000000000","message":"Done","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"}],"cinder/volume/drivers/hitachi/hbsd_basiclib.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94bcf19d1ad9f6939868c7f9c60564763a3204bc","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    705: _(\u0027The specified ldev %(ldev)s could not be managed. \u0027"},{"line_number":145,"context_line":"           \u0027The ldev must not be paired.\u0027),"},{"line_number":146,"context_line":"    706: _(\u0027The volume %(volume_id)s could not be unmanaged. \u0027"},{"line_number":147,"context_line":"           \u0027The volume type must be Normal.\u0027),"},{"line_number":148,"context_line":"}"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_56d6a8c4","line":147,"updated":"2014-12-29 05:37:18.000000000","message":"What is a Normal volume type?","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"520f7586e0368d3ab866f16da7d874083cabe0c4","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    705: _(\u0027The specified ldev %(ldev)s could not be managed. \u0027"},{"line_number":145,"context_line":"           \u0027The ldev must not be paired.\u0027),"},{"line_number":146,"context_line":"    706: _(\u0027The volume %(volume_id)s could not be unmanaged. \u0027"},{"line_number":147,"context_line":"           \u0027The volume type must be Normal.\u0027),"},{"line_number":148,"context_line":"}"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_a4b4f635","line":147,"in_reply_to":"3a961159_56d6a8c4","updated":"2014-12-29 08:14:55.000000000","message":"It is about a metadata checking.\nWhen a volume is created via a create_volume method. this driver assigns \"Normal\" to volume_type, and sets to the metadata.\nAlso, when a volume is copied from the volume, it assigns \"V-VOL\" to volume_type and set to the metadata.\n\nThis messages checks if the copied volume is being unmanaged wrongly.","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"}],"cinder/volume/drivers/hitachi/hbsd_common.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7a3f01bc3f38df68b480525c83252291f9b8c530","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        return num"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def _check_num_type(self, num):"},{"line_number":219,"context_line":"        if num.isdigit():"},{"line_number":220,"context_line":"            type \u003d \u0027dec\u0027"},{"line_number":221,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_bdeaabd5","line":218,"updated":"2014-12-22 15:53:16.000000000","message":"Is it used anywhere? I didn\u0027t find any reference","commit_id":"9e72fdac1df2a00741a7325e11f33df147db59de"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"6d232b6d10ddab1f989c52687a1e263bc10439fe","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        return num"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def _check_num_type(self, num):"},{"line_number":219,"context_line":"        if num.isdigit():"},{"line_number":220,"context_line":"            type \u003d \u0027dec\u0027"},{"line_number":221,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_687caeb6","line":218,"in_reply_to":"3a961159_bdeaabd5","updated":"2014-12-27 04:29:27.000000000","message":"Will remove it. Thanks.","commit_id":"9e72fdac1df2a00741a7325e11f33df147db59de"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94bcf19d1ad9f6939868c7f9c60564763a3204bc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"\"\"\""},{"line_number":39,"context_line":"Version history:"},{"line_number":40,"context_line":"    1.1.0 - Add manage_existing/manage_existing_get_size/unmanage methods"},{"line_number":41,"context_line":"\"\"\""},{"line_number":42,"context_line":"VERSION \u003d \u00271.1.0\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_b6ec2c94","line":39,"updated":"2014-12-29 05:37:18.000000000","message":"Should add a line for version 1.0.0.","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"520f7586e0368d3ab866f16da7d874083cabe0c4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"\"\"\""},{"line_number":39,"context_line":"Version history:"},{"line_number":40,"context_line":"    1.1.0 - Add manage_existing/manage_existing_get_size/unmanage methods"},{"line_number":41,"context_line":"\"\"\""},{"line_number":42,"context_line":"VERSION \u003d \u00271.1.0\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_c480224c","line":39,"in_reply_to":"3a961159_b6ec2c94","updated":"2014-12-29 08:14:55.000000000","message":"Done","commit_id":"ca0c8fb8f47a7258ce7f13146109e0767115d06c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b7f945cd1e7a505f7c94cb05b4aa1ffd55bd9a0a","unresolved":false,"context_lines":[{"line_number":759,"context_line":""},{"line_number":760,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":761,"context_line":"        ldev \u003d existing_ref.get(\u0027ldev\u0027, None)"},{"line_number":762,"context_line":"        ldev \u003d self._string2int(ldev)"},{"line_number":763,"context_line":"        return {\u0027provider_location\u0027: ldev}"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"    def _manage_existing_get_size(self, volume, existing_ref):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_54a5e202","line":762,"updated":"2015-01-20 21:48:22.000000000","message":"If ldev is None, the above line will throw an exception. Should add a None check.\n\nAlso the left hand side and right hand side use the same variable name and they are not even of the same type.  Can you pick a different name for the left hand side.","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"6b95a16df5836710d3d27197118b39f4b99bbed6","unresolved":false,"context_lines":[{"line_number":759,"context_line":""},{"line_number":760,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":761,"context_line":"        ldev \u003d existing_ref.get(\u0027ldev\u0027, None)"},{"line_number":762,"context_line":"        ldev \u003d self._string2int(ldev)"},{"line_number":763,"context_line":"        return {\u0027provider_location\u0027: ldev}"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"    def _manage_existing_get_size(self, volume, existing_ref):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_dfba5dbf","line":762,"in_reply_to":"1a930d6b_54a5e202","updated":"2015-01-23 14:18:02.000000000","message":"Done.\n\nIn addition, I will add  unitests in case ldev is None, for manage_existing_get_size().\n\nAs I checked a source code of cinder core, manage_existing_get_size() is always called first.\nSo, I will add the unit tests to manage_existing_get_size() only.","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b7f945cd1e7a505f7c94cb05b4aa1ffd55bd9a0a","unresolved":false,"context_lines":[{"line_number":766,"context_line":"        if \u0027ldev\u0027 not in existing_ref:"},{"line_number":767,"context_line":"            msg \u003d basic_lib.output_err(701)"},{"line_number":768,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":769,"context_line":"        ldev \u003d existing_ref.get(\u0027ldev\u0027, None)"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        ldev \u003d self._string2int(ldev)"},{"line_number":772,"context_line":"        if ldev is None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_b447e61c","line":769,"updated":"2015-01-20 21:48:22.000000000","message":"ldev \u003d existing_ref.get(\u0027ldev\u0027) should be enough.","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"6b95a16df5836710d3d27197118b39f4b99bbed6","unresolved":false,"context_lines":[{"line_number":766,"context_line":"        if \u0027ldev\u0027 not in existing_ref:"},{"line_number":767,"context_line":"            msg \u003d basic_lib.output_err(701)"},{"line_number":768,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":769,"context_line":"        ldev \u003d existing_ref.get(\u0027ldev\u0027, None)"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        ldev \u003d self._string2int(ldev)"},{"line_number":772,"context_line":"        if ldev is None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_ffb1d9e1","line":769,"in_reply_to":"1a930d6b_b447e61c","updated":"2015-01-23 14:18:02.000000000","message":"Done","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b7f945cd1e7a505f7c94cb05b4aa1ffd55bd9a0a","unresolved":false,"context_lines":[{"line_number":768,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":769,"context_line":"        ldev \u003d existing_ref.get(\u0027ldev\u0027, None)"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        ldev \u003d self._string2int(ldev)"},{"line_number":772,"context_line":"        if ldev is None:"},{"line_number":773,"context_line":"            msg \u003d basic_lib.output_err(648, resource\u003d\u0027LDEV\u0027)"},{"line_number":774,"context_line":"            raise exception.HBSDError(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_3463f6b2","line":771,"updated":"2015-01-20 21:48:22.000000000","message":"Can you use a different name on the left hand side?","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"6b95a16df5836710d3d27197118b39f4b99bbed6","unresolved":false,"context_lines":[{"line_number":768,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":769,"context_line":"        ldev \u003d existing_ref.get(\u0027ldev\u0027, None)"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        ldev \u003d self._string2int(ldev)"},{"line_number":772,"context_line":"        if ldev is None:"},{"line_number":773,"context_line":"            msg \u003d basic_lib.output_err(648, resource\u003d\u0027LDEV\u0027)"},{"line_number":774,"context_line":"            raise exception.HBSDError(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_5fc66d4a","line":771,"in_reply_to":"1a930d6b_3463f6b2","updated":"2015-01-23 14:18:02.000000000","message":"Done","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"b546821c83bd1de8937f18899b69f95e15d82fc2","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            return None"},{"line_number":209,"context_line":"        if num.isdigit():"},{"line_number":210,"context_line":"            return int(num, 10)"},{"line_number":211,"context_line":"        if not re.match(r\u0027\\w\\w:\\w\\w:\\w\\w\u0027, num):"},{"line_number":212,"context_line":"            return None"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_14006c00","line":211,"updated":"2015-02-03 05:26:57.000000000","message":"Is it always two colons?  You will never get FF:FF or FF:FF:FF:FF?  If you can get others, I suggest: if not \u0027:\u0027 in num","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"b39ca8f93d214ff88013b17e98754f016182497f","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            return None"},{"line_number":209,"context_line":"        if num.isdigit():"},{"line_number":210,"context_line":"            return int(num, 10)"},{"line_number":211,"context_line":"        if not re.match(r\u0027\\w\\w:\\w\\w:\\w\\w\u0027, num):"},{"line_number":212,"context_line":"            return None"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_d003200b","line":211,"in_reply_to":"da86d52c_14006c00","updated":"2015-02-03 17:51:27.000000000","message":"It is always two colons.","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"b546821c83bd1de8937f18899b69f95e15d82fc2","unresolved":false,"context_lines":[{"line_number":759,"context_line":"    def init_volinfo(self, vol_info, ldev):"},{"line_number":760,"context_line":"        vol_info[ldev] \u003d {\u0027in_use\u0027: TryLock(), \u0027lock\u0027: threading.Lock()}"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":763,"context_line":"        ldev \u003d self._string2int(existing_ref.get(\u0027ldev\u0027))"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        msg \u003d basic_lib.set_msg(4, volume_id\u003dvolume[\u0027id\u0027], ldev\u003dldev)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_740d2837","line":762,"updated":"2015-02-03 05:26:57.000000000","message":"I suggest a docstring here describing what you expect to receive in existing_ref.","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"b39ca8f93d214ff88013b17e98754f016182497f","unresolved":false,"context_lines":[{"line_number":759,"context_line":"    def init_volinfo(self, vol_info, ldev):"},{"line_number":760,"context_line":"        vol_info[ldev] \u003d {\u0027in_use\u0027: TryLock(), \u0027lock\u0027: threading.Lock()}"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":763,"context_line":"        ldev \u003d self._string2int(existing_ref.get(\u0027ldev\u0027))"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        msg \u003d basic_lib.set_msg(4, volume_id\u003dvolume[\u0027id\u0027], ldev\u003dldev)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_500f302e","line":762,"in_reply_to":"da86d52c_740d2837","updated":"2015-02-03 17:51:27.000000000","message":"I will add the docstirng.","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"b546821c83bd1de8937f18899b69f95e15d82fc2","unresolved":false,"context_lines":[{"line_number":788,"context_line":"                existing_ref\u003dexisting_ref,"},{"line_number":789,"context_line":"                reason\u003dsix.text_type(ex))"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def _unmanage(self, volume, ldev):"},{"line_number":792,"context_line":"        with self.horcmgr_flock:"},{"line_number":793,"context_line":"            self.delete_pair(ldev)"},{"line_number":794,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_342ad07e","line":791,"updated":"2015-02-03 05:26:57.000000000","message":"Can you please describe what unmanage is doing (lines 791-825)?  I am not familiar with the hitachi commands.  It looks like it\u0027s handling the case of an attached volume, but that is blocked by manager.py.","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"b39ca8f93d214ff88013b17e98754f016182497f","unresolved":false,"context_lines":[{"line_number":788,"context_line":"                existing_ref\u003dexisting_ref,"},{"line_number":789,"context_line":"                reason\u003dsix.text_type(ex))"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def _unmanage(self, volume, ldev):"},{"line_number":792,"context_line":"        with self.horcmgr_flock:"},{"line_number":793,"context_line":"            self.delete_pair(ldev)"},{"line_number":794,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_1003f873","line":791,"in_reply_to":"da86d52c_342ad07e","updated":"2015-02-03 17:51:27.000000000","message":"It is not about attaching volume.\nRather, it is about a storage\u0027s feature creating a pair of two different volumes.\n\nThere is a case where we would like to delete the pair before unmanaging (line 793).\n\nAlso, there is a case where we would like to avoid unmanaging a volume pairing with another one. (line 811)","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"}],"cinder/volume/drivers/hitachi/hbsd_horcm.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7a3f01bc3f38df68b480525c83252291f9b8c530","unresolved":false,"context_lines":[{"line_number":1529,"context_line":""},{"line_number":1530,"context_line":"        lines \u003d stdout.splitlines()"},{"line_number":1531,"context_line":"        for line in lines:"},{"line_number":1532,"context_line":"            if re.match(\"VOL_TYPE :\", line):"},{"line_number":1533,"context_line":"                vol_type_line \u003d line"},{"line_number":1534,"context_line":"                vol_type \u003d shlex.split(line)[2]"},{"line_number":1535,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_5d7e271a","line":1532,"updated":"2014-12-22 15:53:16.000000000","message":"You could use if-elif statement here and below","commit_id":"9e72fdac1df2a00741a7325e11f33df147db59de"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"6d232b6d10ddab1f989c52687a1e263bc10439fe","unresolved":false,"context_lines":[{"line_number":1529,"context_line":""},{"line_number":1530,"context_line":"        lines \u003d stdout.splitlines()"},{"line_number":1531,"context_line":"        for line in lines:"},{"line_number":1532,"context_line":"            if re.match(\"VOL_TYPE :\", line):"},{"line_number":1533,"context_line":"                vol_type_line \u003d line"},{"line_number":1534,"context_line":"                vol_type \u003d shlex.split(line)[2]"},{"line_number":1535,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_a84db69b","line":1532,"in_reply_to":"3a961159_5d7e271a","updated":"2014-12-27 04:29:27.000000000","message":"Done","commit_id":"9e72fdac1df2a00741a7325e11f33df147db59de"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7a3f01bc3f38df68b480525c83252291f9b8c530","unresolved":false,"context_lines":[{"line_number":1567,"context_line":"                raise exception.HBSDError(data\u003dmsg)"},{"line_number":1568,"context_line":""},{"line_number":1569,"context_line":"        size_gigabyte \u003d size / 2097152"},{"line_number":1570,"context_line":"        if size % 2097152:"},{"line_number":1571,"context_line":"            msg \u003d basic_lib.output_err(703, ldev\u003dldev)"},{"line_number":1572,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1573,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_1daf3f7e","line":1570,"updated":"2014-12-22 15:53:16.000000000","message":"Looks like size_gigabyte could be used here","commit_id":"9e72fdac1df2a00741a7325e11f33df147db59de"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"6d232b6d10ddab1f989c52687a1e263bc10439fe","unresolved":false,"context_lines":[{"line_number":1567,"context_line":"                raise exception.HBSDError(data\u003dmsg)"},{"line_number":1568,"context_line":""},{"line_number":1569,"context_line":"        size_gigabyte \u003d size / 2097152"},{"line_number":1570,"context_line":"        if size % 2097152:"},{"line_number":1571,"context_line":"            msg \u003d basic_lib.output_err(703, ldev\u003dldev)"},{"line_number":1572,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1573,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_085c0a4c","line":1570,"in_reply_to":"3a961159_1daf3f7e","updated":"2014-12-27 04:29:27.000000000","message":"Checking  \"size\" is correct. To improve code readability. Will erase size_gigabyte variable.","commit_id":"9e72fdac1df2a00741a7325e11f33df147db59de"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"7a3f01bc3f38df68b480525c83252291f9b8c530","unresolved":false,"context_lines":[{"line_number":1571,"context_line":"            msg \u003d basic_lib.output_err(703, ldev\u003dldev)"},{"line_number":1572,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":"        if num_port:"},{"line_number":1575,"context_line":"            msg \u003d basic_lib.output_err(704, ldev\u003dldev)"},{"line_number":1576,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1577,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_bdbd4bb3","line":1574,"updated":"2014-12-22 15:53:16.000000000","message":"NameError will be raised id num_port is not defined","commit_id":"9e72fdac1df2a00741a7325e11f33df147db59de"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"6d232b6d10ddab1f989c52687a1e263bc10439fe","unresolved":false,"context_lines":[{"line_number":1571,"context_line":"            msg \u003d basic_lib.output_err(703, ldev\u003dldev)"},{"line_number":1572,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":"        if num_port:"},{"line_number":1575,"context_line":"            msg \u003d basic_lib.output_err(704, ldev\u003dldev)"},{"line_number":1576,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1577,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_e847be75","line":1574,"in_reply_to":"3a961159_bdbd4bb3","updated":"2014-12-27 04:29:27.000000000","message":"Thanks. To avoid the unexpected NameError, I will initialize num_port in this function.","commit_id":"9e72fdac1df2a00741a7325e11f33df147db59de"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b986be290b6bbc952907280b7aced61cb67d8c38","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"                msg \u003d basic_lib.output_err(702, ldev\u003dldev)"},{"line_number":1573,"context_line":"                raise exception.HBSDError(data\u003dmsg)"},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"        if size % 2097152:"},{"line_number":1576,"context_line":"            msg \u003d basic_lib.output_err(703, ldev\u003dldev)"},{"line_number":1577,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1578,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_19bd0f03","line":1575,"updated":"2014-12-30 21:10:09.000000000","message":"Please, use constants from https://github.com/openstack/oslo.utils/blob/master/oslo/utils/units.py here","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"9981d86f0bd82933bcb71c075e89f663cf5f88a8","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"                msg \u003d basic_lib.output_err(702, ldev\u003dldev)"},{"line_number":1573,"context_line":"                raise exception.HBSDError(data\u003dmsg)"},{"line_number":1574,"context_line":""},{"line_number":1575,"context_line":"        if size % 2097152:"},{"line_number":1576,"context_line":"            msg \u003d basic_lib.output_err(703, ldev\u003dldev)"},{"line_number":1577,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1578,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_6f95f4e2","line":1575,"in_reply_to":"3a961159_19bd0f03","updated":"2015-01-07 10:50:56.000000000","message":"Done","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b986be290b6bbc952907280b7aced61cb67d8c38","unresolved":false,"context_lines":[{"line_number":1580,"context_line":"            msg \u003d basic_lib.output_err(704, ldev\u003dldev)"},{"line_number":1581,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1582,"context_line":""},{"line_number":1583,"context_line":"        return size / 2097152"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_39b80b11","line":1583,"updated":"2014-12-30 21:10:09.000000000","message":"Please, use constants from https://github.com/openstack/oslo.utils/blob/master/oslo/utils/units.py here","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"9981d86f0bd82933bcb71c075e89f663cf5f88a8","unresolved":false,"context_lines":[{"line_number":1580,"context_line":"            msg \u003d basic_lib.output_err(704, ldev\u003dldev)"},{"line_number":1581,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1582,"context_line":""},{"line_number":1583,"context_line":"        return size / 2097152"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_8f9a2012","line":1583,"in_reply_to":"3a961159_39b80b11","updated":"2015-01-07 10:50:56.000000000","message":"Done","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"b546821c83bd1de8937f18899b69f95e15d82fc2","unresolved":false,"context_lines":[{"line_number":1537,"context_line":"            if re.match(\"STS :\", line):"},{"line_number":1538,"context_line":"                sts_line \u003d line"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"            elif re.match(\"VOL_TYPE :\", line):"},{"line_number":1541,"context_line":"                vol_type \u003d shlex.split(line)[2]"},{"line_number":1542,"context_line":""},{"line_number":1543,"context_line":"            elif re.match(\"VOL_ATTR :\", line):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_d43414e0","line":1540,"updated":"2015-02-03 05:26:57.000000000","message":"For all of these, are you looking for a string at the beginning of the line?  If so, \n\n    line.startswith(\u0027VOL_TYPE :\u0027)\n\nis better, for example.  If not, then\n\n    \u0027VOL TYPE :\u0027 in line\n\nis better.\n\nI think regular expressions are slower and not necessary for these cases of simply searching for a constant substring.","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"b39ca8f93d214ff88013b17e98754f016182497f","unresolved":false,"context_lines":[{"line_number":1537,"context_line":"            if re.match(\"STS :\", line):"},{"line_number":1538,"context_line":"                sts_line \u003d line"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"            elif re.match(\"VOL_TYPE :\", line):"},{"line_number":1541,"context_line":"                vol_type \u003d shlex.split(line)[2]"},{"line_number":1542,"context_line":""},{"line_number":1543,"context_line":"            elif re.match(\"VOL_ATTR :\", line):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_f00d8491","line":1540,"in_reply_to":"da86d52c_d43414e0","updated":"2015-02-03 17:51:27.000000000","message":"Thanks I will update the patch in accordance with your comment.","commit_id":"f58a83c24a20e3548a06684e2685c55485eb5042"}],"cinder/volume/drivers/hitachi/hbsd_snm2.py":[{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"afac7c4ea2fdaa6bd29c5a1d96e048c9250f92f1","unresolved":false,"context_lines":[{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        try:"},{"line_number":1123,"context_line":"            stdout \u003d self._get_lu(ldev)"},{"line_number":1124,"context_line":"        except Exception:"},{"line_number":1125,"context_line":"            msg \u003d basic_lib.output_err(648, resource\u003d\u0027LDEV\u0027)"},{"line_number":1126,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1127,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_3a0e5a33","line":1124,"updated":"2014-12-29 12:58:21.000000000","message":"Can you raise a more specific exception here?","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"9981d86f0bd82933bcb71c075e89f663cf5f88a8","unresolved":false,"context_lines":[{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        try:"},{"line_number":1123,"context_line":"            stdout \u003d self._get_lu(ldev)"},{"line_number":1124,"context_line":"        except Exception:"},{"line_number":1125,"context_line":"            msg \u003d basic_lib.output_err(648, resource\u003d\u0027LDEV\u0027)"},{"line_number":1126,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1127,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_efaf2429","line":1124,"in_reply_to":"3a961159_3a0e5a33","updated":"2015-01-07 10:50:56.000000000","message":"Changed to catch the specific exception instead of Exception.\nThanks.","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b986be290b6bbc952907280b7aced61cb67d8c38","unresolved":false,"context_lines":[{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        try:"},{"line_number":1123,"context_line":"            stdout \u003d self._get_lu(ldev)"},{"line_number":1124,"context_line":"        except Exception:"},{"line_number":1125,"context_line":"            msg \u003d basic_lib.output_err(648, resource\u003d\u0027LDEV\u0027)"},{"line_number":1126,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1127,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_b97ebb68","line":1124,"in_reply_to":"3a961159_3a0e5a33","updated":"2014-12-30 21:10:09.000000000","message":"Rushi, did you mean \u0027except\u0027?","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"25fbe2b2dd2643d048e7fde4c4a46105f6393664","unresolved":false,"context_lines":[{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        try:"},{"line_number":1123,"context_line":"            stdout \u003d self._get_lu(ldev)"},{"line_number":1124,"context_line":"        except Exception:"},{"line_number":1125,"context_line":"            msg \u003d basic_lib.output_err(648, resource\u003d\u0027LDEV\u0027)"},{"line_number":1126,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1127,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_6ac49e0e","line":1124,"in_reply_to":"3a961159_b97ebb68","updated":"2015-01-12 12:10:30.000000000","message":"@Ivan, yes. My bad :)","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b986be290b6bbc952907280b7aced61cb67d8c38","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        size \u003d int(splits[1])"},{"line_number":1144,"context_line":"        if size % 2097152:"},{"line_number":1145,"context_line":"            msg \u003d basic_lib.output_err(703, ldev\u003dldev)"},{"line_number":1146,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_79d2935c","line":1144,"updated":"2014-12-30 21:10:09.000000000","message":"Please, use constants from https://github.com/openstack/oslo.utils/blob/master/oslo/utils/units.py here","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"9981d86f0bd82933bcb71c075e89f663cf5f88a8","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        size \u003d int(splits[1])"},{"line_number":1144,"context_line":"        if size % 2097152:"},{"line_number":1145,"context_line":"            msg \u003d basic_lib.output_err(703, ldev\u003dldev)"},{"line_number":1146,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1147,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_2f8f6cce","line":1144,"in_reply_to":"3a961159_79d2935c","updated":"2015-01-07 10:50:56.000000000","message":"Done","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b986be290b6bbc952907280b7aced61cb67d8c38","unresolved":false,"context_lines":[{"line_number":1150,"context_line":"            msg \u003d basic_lib.output_err(704, ldev\u003dldev)"},{"line_number":1151,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1152,"context_line":""},{"line_number":1153,"context_line":"        return size / 2097152"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_f9d68352","line":1153,"updated":"2014-12-30 21:10:09.000000000","message":"Please, use constants from https://github.com/openstack/oslo.utils/blob/master/oslo/utils/units.py here","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"9981d86f0bd82933bcb71c075e89f663cf5f88a8","unresolved":false,"context_lines":[{"line_number":1150,"context_line":"            msg \u003d basic_lib.output_err(704, ldev\u003dldev)"},{"line_number":1151,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1152,"context_line":""},{"line_number":1153,"context_line":"        return size / 2097152"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_cfa0a844","line":1153,"in_reply_to":"3a961159_f9d68352","updated":"2015-01-07 10:50:56.000000000","message":"Done","commit_id":"7c62b1f4e76d7fc7f6ba85d76b9d64dd06f0369d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b7f945cd1e7a505f7c94cb05b4aa1ffd55bd9a0a","unresolved":false,"context_lines":[{"line_number":1133,"context_line":"        splits \u003d shlex.split(line)"},{"line_number":1134,"context_line":""},{"line_number":1135,"context_line":"        vol_type \u003d splits[len(splits) - 1]"},{"line_number":1136,"context_line":"        if \u0027Normal\u0027 !\u003d vol_type:"},{"line_number":1137,"context_line":"            msg \u003d basic_lib.output_err(702, ldev\u003dldev)"},{"line_number":1138,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1139,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_74a49e57","line":1136,"updated":"2015-01-20 21:48:22.000000000","message":"\u0027Normal\u0027 is used in multiple places. Is it case sensitive?  Can you use a constant for this, i.e., NORMAL_VOLUME_TYPE.","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"6b95a16df5836710d3d27197118b39f4b99bbed6","unresolved":false,"context_lines":[{"line_number":1133,"context_line":"        splits \u003d shlex.split(line)"},{"line_number":1134,"context_line":""},{"line_number":1135,"context_line":"        vol_type \u003d splits[len(splits) - 1]"},{"line_number":1136,"context_line":"        if \u0027Normal\u0027 !\u003d vol_type:"},{"line_number":1137,"context_line":"            msg \u003d basic_lib.output_err(702, ldev\u003dldev)"},{"line_number":1138,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1139,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_ff9ab961","line":1136,"in_reply_to":"1a930d6b_74a49e57","updated":"2015-01-23 14:18:02.000000000","message":"Done","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b7f945cd1e7a505f7c94cb05b4aa1ffd55bd9a0a","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"        vol_type \u003d splits[len(splits) - 1]"},{"line_number":1136,"context_line":"        if \u0027Normal\u0027 !\u003d vol_type:"},{"line_number":1137,"context_line":"            msg \u003d basic_lib.output_err(702, ldev\u003dldev)"},{"line_number":1138,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1139,"context_line":""},{"line_number":1140,"context_line":"        dppool \u003d splits[5]"},{"line_number":1141,"context_line":"        if \u0027N/A\u0027 \u003d\u003d dppool:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_3f2bcf83","line":1138,"updated":"2015-01-20 21:48:22.000000000","message":"Can you add a unit test (assertRaises) for this?","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"},{"author":{"_account_id":9174,"name":"Seiji Aguchi","email":"seiji.aguchi.tr@hitachi.com","username":"saguchi"},"change_message_id":"6b95a16df5836710d3d27197118b39f4b99bbed6","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"        vol_type \u003d splits[len(splits) - 1]"},{"line_number":1136,"context_line":"        if \u0027Normal\u0027 !\u003d vol_type:"},{"line_number":1137,"context_line":"            msg \u003d basic_lib.output_err(702, ldev\u003dldev)"},{"line_number":1138,"context_line":"            raise exception.HBSDError(data\u003dmsg)"},{"line_number":1139,"context_line":""},{"line_number":1140,"context_line":"        dppool \u003d splits[5]"},{"line_number":1141,"context_line":"        if \u0027N/A\u0027 \u003d\u003d dppool:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_5f782d2b","line":1138,"in_reply_to":"1a930d6b_3f2bcf83","updated":"2015-01-23 14:18:02.000000000","message":"No, I can\u0027t. HBSDError is caught in manage_existing_get_size() in hbsd_common.py and ManageExistingInvalidReference is raised.\n\nThis means that HBSDError is handled inside this driver, and\nit is never raised outside it.","commit_id":"6e69848181861ee164d2fb253510b5a7acca56e5"}]}
