)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Update DRBD (drbdmanagedrv) Driver to LINSTOR (linstordrv)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"   LINSTOR is an updated storage orchestrator for DRBD,"},{"line_number":10,"context_line":"   replacing the previous DRBD Manage suite."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ic3a4f85c10a2432d4128fce08604e9868722e8f7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_7791c343","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":3},"updated":"2018-12-10 23:01:56.000000000","message":"Extra leading spaces.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"}],"cinder/tests/unit/volume/drivers/test_linstordrv.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"try:"},{"line_number":27,"context_line":"    from cinder.volume.drivers import linstordrv as drv"},{"line_number":28,"context_line":"except Exception as e:"},{"line_number":29,"context_line":"    sys.stderr.write(\"Linstor driver loading: exception %s\\n\" % e)"},{"line_number":30,"context_line":"    drv \u003d None"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"skip_unless_linstor_installed \u003d test.testtools.skipIf("}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_97b1ffe5","line":29,"updated":"2018-12-10 23:01:56.000000000","message":"The test code should not have try/except on loading the driver. That is something that should be expected to work.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"try:"},{"line_number":27,"context_line":"    from cinder.volume.drivers import linstordrv as drv"},{"line_number":28,"context_line":"except Exception as e:"},{"line_number":29,"context_line":"    sys.stderr.write(\"Linstor driver loading: exception %s\\n\" % e)"},{"line_number":30,"context_line":"    drv \u003d None"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"skip_unless_linstor_installed \u003d test.testtools.skipIf("}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9acfcd54","line":29,"in_reply_to":"3f79a3b5_97b1ffe5","updated":"2018-12-11 22:43:36.000000000","message":"Done","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":643,"context_line":"    @skip_unless_linstor_installed"},{"line_number":644,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._get_api_storage_pool_dfn_list\u0027)"},{"line_number":645,"context_line":"    def test_get_spd(self, m_spd_list):"},{"line_number":646,"context_line":"        m_spd_list.return_value \u003d \\"},{"line_number":647,"context_line":"            self._fake_driver.fake_api_storage_pool_dfn_list()"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        val \u003d self.driver._get_spd()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_17c5ef3d","line":646,"range":{"start_line":646,"start_character":34,"end_line":646,"end_character":35},"updated":"2018-12-10 23:01:56.000000000","message":"Avoid using \\ to span multiple lines. Wrap in () if no way to format it to fit on one.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":643,"context_line":"    @skip_unless_linstor_installed"},{"line_number":644,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._get_api_storage_pool_dfn_list\u0027)"},{"line_number":645,"context_line":"    def test_get_spd(self, m_spd_list):"},{"line_number":646,"context_line":"        m_spd_list.return_value \u003d \\"},{"line_number":647,"context_line":"            self._fake_driver.fake_api_storage_pool_dfn_list()"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        val \u003d self.driver._get_spd()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9ae82da9","line":646,"range":{"start_line":646,"start_character":34,"end_line":646,"end_character":35},"in_reply_to":"3f79a3b5_17c5ef3d","updated":"2018-12-11 22:43:36.000000000","message":"Done","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder import exception as cinder_exception"},{"line_number":22,"context_line":"from cinder import test"},{"line_number":23,"context_line":"from cinder.volume import configuration as conf"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.volume.drivers import linstordrv as drv"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"skip_unless_linstor_installed \u003d test.testtools.skipIf("}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_dd9d135a","line":24,"updated":"2019-01-04 16:49:44.000000000","message":"Remove extra blank line.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.volume.drivers import linstordrv as drv"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"skip_unless_linstor_installed \u003d test.testtools.skipIf("},{"line_number":28,"context_line":"    drv is None,"},{"line_number":29,"context_line":"    \"No Linstor driver installed\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"CONF \u003d cfg.CONF"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_5df04391","line":29,"range":{"start_line":27,"start_character":0,"end_line":29,"end_character":34},"updated":"2019-01-04 16:49:44.000000000","message":"Why is this needed? Either your driver is present or it\u0027s not and the unit tests won\u0027t be either.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        self.driver.diskless \u003d True"},{"line_number":541,"context_line":"        self.driver.default_uri \u003d \u0027linstor://localhost\u0027"},{"line_number":542,"context_line":"        self.driver.default_backend_name \u003d \u0027lin-test-driver\u0027"},{"line_number":543,"context_line":"        self.driver.configuration.reserved_percentage \u003d int(\u00270\u0027)"},{"line_number":544,"context_line":"        self.driver.configuration.max_over_subscription_ratio \u003d int(\u00270\u0027)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    @skip_unless_linstor_installed"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_5dd7e3ee","line":543,"range":{"start_line":543,"start_character":56,"end_line":543,"end_character":64},"updated":"2019-01-04 16:49:44.000000000","message":"Just set to 0.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":541,"context_line":"        self.driver.default_uri \u003d \u0027linstor://localhost\u0027"},{"line_number":542,"context_line":"        self.driver.default_backend_name \u003d \u0027lin-test-driver\u0027"},{"line_number":543,"context_line":"        self.driver.configuration.reserved_percentage \u003d int(\u00270\u0027)"},{"line_number":544,"context_line":"        self.driver.configuration.max_over_subscription_ratio \u003d int(\u00270\u0027)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    @skip_unless_linstor_installed"},{"line_number":547,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._ping\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_bdffef65","line":544,"range":{"start_line":544,"start_character":64,"end_line":544,"end_character":72},"updated":"2019-01-04 16:49:44.000000000","message":"same","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        val \u003d self.driver._clean_uuid()"},{"line_number":561,"context_line":"        expected \u003d u\u0027bd6472d1-dc3c-4d41-a5f0-f44271c05680\u0027"},{"line_number":562,"context_line":"        self.assertEqual(val, expected)"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    # Test volume size conversions"},{"line_number":565,"context_line":"    @skip_unless_linstor_installed"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_bd34cf4b","line":562,"range":{"start_line":562,"start_character":13,"end_line":562,"end_character":39},"updated":"2019-01-04 16:49:44.000000000","message":"assertEqual argument order should be (EXPECTED, ACTUAL).","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        m_api_reply.return_value \u003d True"},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        # No exception should be raised"},{"line_number":740,"context_line":"        self.driver.create_snapshot(SNAPSHOT)"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"    @skip_unless_linstor_installed"},{"line_number":743,"context_line":"    @mock.patch(DRIVER + \u0027time.sleep\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_1dccfb33","line":740,"updated":"2019-01-04 16:49:44.000000000","message":"This really should assert on expected calls at least.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"95f3103202658e1c18d78ca8d797e42b4c979771","unresolved":false,"context_lines":[{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        val \u003d self.driver.create_volume(test_volume)"},{"line_number":895,"context_line":"        expected \u003d {}"},{"line_number":896,"context_line":"        self.assertEqual(val, expected)"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._check_api_reply\u0027)"},{"line_number":899,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._api_rsc_dfn_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dfd5e7cf_5c24ce0d","line":896,"range":{"start_line":896,"start_character":25,"end_line":896,"end_character":38},"updated":"2019-01-07 20:18:22.000000000","message":"These args should be swapped.","commit_id":"8c04a9a92263d771741f03f003b1a6ee6d4be73c"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"3d6a6427b5ad00a4e3091d1798ad492253c3c698","unresolved":false,"context_lines":[{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        val \u003d self.driver.create_volume(test_volume)"},{"line_number":895,"context_line":"        expected \u003d {}"},{"line_number":896,"context_line":"        self.assertEqual(val, expected)"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._check_api_reply\u0027)"},{"line_number":899,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._api_rsc_dfn_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bfdaf3ff_39f53a58","line":896,"range":{"start_line":896,"start_character":25,"end_line":896,"end_character":38},"in_reply_to":"dfd5e7cf_5c24ce0d","updated":"2019-01-14 18:28:19.000000000","message":"Done.  Sorry for missing those.","commit_id":"8c04a9a92263d771741f03f003b1a6ee6d4be73c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"95f3103202658e1c18d78ca8d797e42b4c979771","unresolved":false,"context_lines":[{"line_number":944,"context_line":""},{"line_number":945,"context_line":"        val \u003d self.driver.delete_volume(test_volume)"},{"line_number":946,"context_line":"        expected \u003d True"},{"line_number":947,"context_line":"        self.assertEqual(val, expected)"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._check_api_reply\u0027)"},{"line_number":950,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._get_api_volume_extend\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dfd5e7cf_1c1e46ba","line":947,"range":{"start_line":947,"start_character":25,"end_line":947,"end_character":38},"updated":"2019-01-07 20:18:22.000000000","message":"same throughout","commit_id":"8c04a9a92263d771741f03f003b1a6ee6d4be73c"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"3d6a6427b5ad00a4e3091d1798ad492253c3c698","unresolved":false,"context_lines":[{"line_number":944,"context_line":""},{"line_number":945,"context_line":"        val \u003d self.driver.delete_volume(test_volume)"},{"line_number":946,"context_line":"        expected \u003d True"},{"line_number":947,"context_line":"        self.assertEqual(val, expected)"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._check_api_reply\u0027)"},{"line_number":950,"context_line":"    @mock.patch(DRIVER + \u0027LinstorBaseDriver._get_api_volume_extend\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bfdaf3ff_f9eed286","line":947,"range":{"start_line":947,"start_character":25,"end_line":947,"end_character":38},"in_reply_to":"dfd5e7cf_1c1e46ba","updated":"2019-01-14 18:28:19.000000000","message":"Done.","commit_id":"8c04a9a92263d771741f03f003b1a6ee6d4be73c"}],"cinder/volume/drivers/linstordrv.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This driver connects Cinder to an installed LINSTOR instance, see"},{"line_number":20,"context_line":"https://docs.linbit.com/docs/users-guide-9.0/#ch-openstack"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_d7ba17b9","line":17,"range":{"start_line":17,"start_character":3,"end_line":17,"end_character":3},"updated":"2018-12-10 23:01:56.000000000","message":"Extra newlines should be removed.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This driver connects Cinder to an installed LINSTOR instance, see"},{"line_number":20,"context_line":"https://docs.linbit.com/docs/users-guide-9.0/#ch-openstack"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f75e1a7b","line":17,"range":{"start_line":17,"start_character":3,"end_line":17,"end_character":3},"in_reply_to":"3f79a3b5_d7ba17b9","updated":"2018-12-11 22:43:36.000000000","message":"Done","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"from cinder.volume import driver"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"try:"},{"line_number":41,"context_line":"    from google.protobuf.json_format import MessageToDict"},{"line_number":42,"context_line":"except ImportError:"},{"line_number":43,"context_line":"    MessageToDict \u003d None"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f7b5d3c9","line":41,"range":{"start_line":41,"start_character":44,"end_line":41,"end_character":57},"updated":"2018-12-10 23:01:56.000000000","message":"Import only modules, not classes.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":38,"context_line":"from cinder.volume import driver"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"try:"},{"line_number":41,"context_line":"    from google.protobuf.json_format import MessageToDict"},{"line_number":42,"context_line":"except ImportError:"},{"line_number":43,"context_line":"    MessageToDict \u003d None"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_976b261c","line":41,"range":{"start_line":41,"start_character":44,"end_line":41,"end_character":57},"in_reply_to":"3f79a3b5_f7b5d3c9","updated":"2018-12-11 22:43:36.000000000","message":"Done","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    MessageToDict \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"try:"},{"line_number":46,"context_line":"    import linstor"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    lin_drv \u003d linstor.Linstor"},{"line_number":49,"context_line":"except ImportError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_37c58b35","line":46,"updated":"2018-12-10 23:01:56.000000000","message":"Is this a non-public library?","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    MessageToDict \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"try:"},{"line_number":46,"context_line":"    import linstor"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    lin_drv \u003d linstor.Linstor"},{"line_number":49,"context_line":"except ImportError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5a57f55d","line":46,"in_reply_to":"3f79a3b5_37c58b35","updated":"2018-12-11 22:43:36.000000000","message":"It is a public library available at https://github.com/LINBIT/linstor-api-py but for now we package it per distribution, like https://launchpad.net/~linbit/+archive/ubuntu/linbit-drbd9-stack for Ubuntu and so on.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"linstor_opts \u003d ["},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027linstor_default_volume_group_name\u0027,"},{"line_number":56,"context_line":"               default\u003d\u0027drbd-vg\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027Default Volume Group name for LINSTOR.\u0027"},{"line_number":58,"context_line":"                    \u0027Not Cinder Volume.\u0027),"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027linstor_default_uri\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_97ffbf67","line":57,"range":{"start_line":57,"start_character":59,"end_line":57,"end_character":60},"updated":"2018-12-10 23:01:56.000000000","message":"Missing trailing space. This will run together in the resulting string.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"linstor_opts \u003d ["},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027linstor_default_volume_group_name\u0027,"},{"line_number":56,"context_line":"               default\u003d\u0027drbd-vg\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027Default Volume Group name for LINSTOR.\u0027"},{"line_number":58,"context_line":"                    \u0027Not Cinder Volume.\u0027),"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027linstor_default_uri\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_1ac65d16","line":57,"range":{"start_line":57,"start_character":59,"end_line":57,"end_character":60},"in_reply_to":"3f79a3b5_97ffbf67","updated":"2018-12-11 22:43:36.000000000","message":"Done","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"               default\u003d\u0027DfltStorPool\u0027,"},{"line_number":66,"context_line":"               help\u003d\u0027Default Storage Pool name for LINSTOR.\u0027),"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027linstor_default_resource_size\u0027,"},{"line_number":69,"context_line":"               default\u003d1,"},{"line_number":70,"context_line":"               help\u003d\u0027Default resource size in GiB.  1049000 KiB \u003d 1GiB\u0027),"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_17f3afa1","line":68,"updated":"2018-12-10 23:01:56.000000000","message":"Default size for all drivers is typically 1G. Is there a reason there needs to be a configurable option for this for this driver?","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"               default\u003d\u0027DfltStorPool\u0027,"},{"line_number":66,"context_line":"               help\u003d\u0027Default Storage Pool name for LINSTOR.\u0027),"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027linstor_default_resource_size\u0027,"},{"line_number":69,"context_line":"               default\u003d1,"},{"line_number":70,"context_line":"               help\u003d\u0027Default resource size in GiB.  1049000 KiB \u003d 1GiB\u0027),"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_da4a25ae","line":68,"in_reply_to":"3f79a3b5_17f3afa1","updated":"2018-12-11 22:43:36.000000000","message":"Done","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                default\u003dTrue,"},{"line_number":82,"context_line":"                help\u003d\u0027True means Cinder node is a diskless LINSTOR node\u0027),"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    cfg.StrOpt(\u0027iscsi_helper\u0027,"},{"line_number":85,"context_line":"               default\u003d\u0027tgtadm\u0027,  # possibly lioadm as well"},{"line_number":86,"context_line":"               help\u003d\u0027Default iSCSI back-end helper\u0027)"},{"line_number":87,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_37eeebb5","line":84,"updated":"2018-12-10 23:01:56.000000000","message":"This should not be (re)defined here.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                default\u003dTrue,"},{"line_number":82,"context_line":"                help\u003d\u0027True means Cinder node is a diskless LINSTOR node\u0027),"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    cfg.StrOpt(\u0027iscsi_helper\u0027,"},{"line_number":85,"context_line":"               default\u003d\u0027tgtadm\u0027,  # possibly lioadm as well"},{"line_number":86,"context_line":"               help\u003d\u0027Default iSCSI back-end helper\u0027)"},{"line_number":87,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_3a56b95f","line":84,"in_reply_to":"3f79a3b5_37eeebb5","updated":"2018-12-11 22:43:36.000000000","message":"Done","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _cinder_volume_name_from_drbd_resource(self, rsc_name):"},{"line_number":173,"context_line":"        cinder_volume_name \u003d rsc_name.split(DM_VN_PREFIX)[1]"},{"line_number":174,"context_line":"        LOG.debug(\u0027VOL NAME: \u0027 + str(cinder_volume_name))"},{"line_number":175,"context_line":"        return cinder_volume_name"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def _drbd_resource_name_from_cinder_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_572a87e4","line":174,"range":{"start_line":174,"start_character":29,"end_line":174,"end_character":37},"updated":"2018-12-10 23:01:56.000000000","message":"Don\u0027t perform string concatenation and conversion inside a logger call. The logger does string formatting, so this should be:\n\nLOG.debug(\u0027VOL NAME: %s\u0027, cinder_volume_name)\n\nThat said, several of these are of questionable value and I think should probably just be removed.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _cinder_volume_name_from_drbd_resource(self, rsc_name):"},{"line_number":173,"context_line":"        cinder_volume_name \u003d rsc_name.split(DM_VN_PREFIX)[1]"},{"line_number":174,"context_line":"        LOG.debug(\u0027VOL NAME: \u0027 + str(cinder_volume_name))"},{"line_number":175,"context_line":"        return cinder_volume_name"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def _drbd_resource_name_from_cinder_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_1a517d66","line":174,"range":{"start_line":174,"start_character":29,"end_line":174,"end_character":37},"in_reply_to":"3f79a3b5_572a87e4","updated":"2018-12-11 22:43:36.000000000","message":"Done","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                    #        sp_node[\u0027vg_name\u0027] \u003d prop.value"},{"line_number":485,"context_line":"                    #    if \"ThinPool\" in prop.key:"},{"line_number":486,"context_line":"                    #        # LOG.debug(prop.value+\" is a Thin Pool\")"},{"line_number":487,"context_line":"                    #        thin_pool \u003d True"},{"line_number":488,"context_line":"                    if \u0027Diskless\u0027 in node[\u0027driver\u0027]:"},{"line_number":489,"context_line":"                        diskless \u003d True"},{"line_number":490,"context_line":"                        sp_node[\u0027sp_free\u0027] \u003d -1.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_17216ffd","line":487,"updated":"2018-12-10 23:01:56.000000000","message":"Remove commented out code.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                    #        sp_node[\u0027vg_name\u0027] \u003d prop.value"},{"line_number":485,"context_line":"                    #    if \"ThinPool\" in prop.key:"},{"line_number":486,"context_line":"                    #        # LOG.debug(prop.value+\" is a Thin Pool\")"},{"line_number":487,"context_line":"                    #        thin_pool \u003d True"},{"line_number":488,"context_line":"                    if \u0027Diskless\u0027 in node[\u0027driver\u0027]:"},{"line_number":489,"context_line":"                        diskless \u003d True"},{"line_number":490,"context_line":"                        sp_node[\u0027sp_free\u0027] \u003d -1.0"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_dacf8525","line":487,"in_reply_to":"3f79a3b5_17216ffd","updated":"2018-12-11 22:43:36.000000000","message":"Done","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0ae9572a4fb5e55d0c3c14b9fd28bff817c6380e","unresolved":false,"context_lines":[{"line_number":1013,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"            # Wait for backend to catch up"},{"line_number":1016,"context_line":"            time.sleep(1)"},{"line_number":1017,"context_line":""},{"line_number":1018,"context_line":"            # Delete RD"},{"line_number":1019,"context_line":"            LOG.debug(\u0027Deleting Resource Definition for \u0027 + drbd_rsc_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_577847f4","line":1016,"updated":"2018-12-10 23:01:56.000000000","message":"Any better way to handle this?\n\nIf not, make sure sleeps are properly mocked out in unit testing so there are not unnecessary delays in test runs.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"4dd70a73d757e7de2db181d3a19564f1190a25c3","unresolved":false,"context_lines":[{"line_number":1013,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"            # Wait for backend to catch up"},{"line_number":1016,"context_line":"            time.sleep(1)"},{"line_number":1017,"context_line":""},{"line_number":1018,"context_line":"            # Delete RD"},{"line_number":1019,"context_line":"            LOG.debug(\u0027Deleting Resource Definition for \u0027 + drbd_rsc_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5ae5b5a5","line":1016,"in_reply_to":"3f79a3b5_577847f4","updated":"2018-12-11 22:43:36.000000000","message":"For now, those sleeps are mocked in tests.","commit_id":"758c50b210c0f76b39d5b15ccd684f8ec5aac1c0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"dd6029b2aa28d6bdc0e72ded4e4340ce25769b9b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"               default\u003d\u0027DfltStorPool\u0027,"},{"line_number":63,"context_line":"               help\u003d\u0027Default Storage Pool name for LINSTOR.\u0027),"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    cfg.IntOpt(\u0027linstor_default_resource_size\u0027,"},{"line_number":66,"context_line":"               default\u003d1,"},{"line_number":67,"context_line":"               help\u003d\u0027Default resource size in GiB.  1049000 KiB \u003d 1GiB\u0027),"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_9beb33ed","line":65,"updated":"2018-12-12 23:16:36.000000000","message":"Comment from patchset 1 still applies.","commit_id":"25fa6d144857e91af0135d80d1fb5631882d4937"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"0972a5a922874e875b731bc8ca936682b264cb80","unresolved":false,"context_lines":[{"line_number":62,"context_line":"               default\u003d\u0027DfltStorPool\u0027,"},{"line_number":63,"context_line":"               help\u003d\u0027Default Storage Pool name for LINSTOR.\u0027),"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    cfg.IntOpt(\u0027linstor_default_resource_size\u0027,"},{"line_number":66,"context_line":"               default\u003d1,"},{"line_number":67,"context_line":"               help\u003d\u0027Default resource size in GiB.  1049000 KiB \u003d 1GiB\u0027),"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_7bc17731","line":65,"in_reply_to":"3f79a3b5_9beb33ed","updated":"2018-12-12 23:29:23.000000000","message":"I let it back in somehow.  Thank you.","commit_id":"25fa6d144857e91af0135d80d1fb5631882d4937"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"dd6029b2aa28d6bdc0e72ded4e4340ce25769b9b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"CONF \u003d cfg.CONF"},{"line_number":85,"context_line":"CONF.register_opts(linstor_opts, group\u003dconfiguration.SHARED_CONF_GROUP)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"MAPPING \u003d {\"drbdmanagedrv\": \"linstordrv\", }"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"CINDER_UNKNOWN \u003d \u0027unknown\u0027"},{"line_number":90,"context_line":"DM_VN_PREFIX \u003d \u0027CV_\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_7b1737f2","line":87,"updated":"2018-12-12 23:16:36.000000000","message":"Why is this here?","commit_id":"25fa6d144857e91af0135d80d1fb5631882d4937"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"0972a5a922874e875b731bc8ca936682b264cb80","unresolved":false,"context_lines":[{"line_number":84,"context_line":"CONF \u003d cfg.CONF"},{"line_number":85,"context_line":"CONF.register_opts(linstor_opts, group\u003dconfiguration.SHARED_CONF_GROUP)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"MAPPING \u003d {\"drbdmanagedrv\": \"linstordrv\", }"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"CINDER_UNKNOWN \u003d \u0027unknown\u0027"},{"line_number":90,"context_line":"DM_VN_PREFIX \u003d \u0027CV_\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_db7e8b19","line":87,"in_reply_to":"3f79a3b5_7b1737f2","updated":"2018-12-12 23:29:23.000000000","message":"I reread your comment about deprecating instead of mapping.  I will remove it.  Thank you.","commit_id":"25fa6d144857e91af0135d80d1fb5631882d4937"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    cfg.IntOpt(\u0027linstor_default_blocksize\u0027,"},{"line_number":70,"context_line":"               default\u003d4096,"},{"line_number":71,"context_line":"               help\u003d\u0027Default Block size for Image restoration.\u0027),"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027linstor_controller_diskless\u0027,"},{"line_number":74,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_436380dd","line":71,"range":{"start_line":71,"start_character":21,"end_line":71,"end_character":31},"updated":"2019-01-04 18:18:07.000000000","message":"Can you add more words to what this is for?  It is not totally clear to me what it is for or how it should be used.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"e95cc48ce905a5f7aff31120a4a7a63a80db4c00","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    cfg.IntOpt(\u0027linstor_default_blocksize\u0027,"},{"line_number":70,"context_line":"               default\u003d4096,"},{"line_number":71,"context_line":"               help\u003d\u0027Default Block size for Image restoration.\u0027),"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027linstor_controller_diskless\u0027,"},{"line_number":74,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_f5182bd4","line":71,"range":{"start_line":71,"start_character":21,"end_line":71,"end_character":31},"in_reply_to":"ffd0ebdf_436380dd","updated":"2019-01-04 21:46:08.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        return cinder_volume_name"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _drbd_resource_name_from_cinder_snapshot(self, snapshot):"},{"line_number":162,"context_line":"        drbd_resource_name \u003d DM_VN_PREFIX + str(snapshot[\u0027volume_id\u0027])"},{"line_number":163,"context_line":"        return drbd_resource_name"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def _drbd_resource_name_from_cinder_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_a2526a66","line":162,"range":{"start_line":162,"start_character":44,"end_line":162,"end_character":47},"updated":"2019-01-04 16:49:44.000000000","message":"Be careful here as str() is different between py2 and py3. Might be better to use string formatting to do this conversion or six.text_type().","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        return cinder_volume_name"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _drbd_resource_name_from_cinder_snapshot(self, snapshot):"},{"line_number":162,"context_line":"        drbd_resource_name \u003d DM_VN_PREFIX + str(snapshot[\u0027volume_id\u0027])"},{"line_number":163,"context_line":"        return drbd_resource_name"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def _drbd_resource_name_from_cinder_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_03dd7813","line":162,"range":{"start_line":162,"start_character":44,"end_line":162,"end_character":47},"in_reply_to":"ffd0ebdf_a2526a66","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            return response"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _get_api_storage_pool_list(self):"},{"line_number":208,"context_line":"        with lin_drv(self.default_uri) as lin:"},{"line_number":209,"context_line":"            if not lin.connected:"},{"line_number":210,"context_line":"                lin.connect()"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"            response \u003d proto.MessageToDict("},{"line_number":213,"context_line":"                lin.storage_pool_list()[0].proto_msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_7d12e75a","line":210,"range":{"start_line":208,"start_character":8,"end_line":210,"end_character":29},"updated":"2019-01-04 16:49:44.000000000","message":"With this pattern repeated so many times, might be a good idea to look into having a common decorator that could be used with these calls that handles this.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            return response"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _get_api_storage_pool_list(self):"},{"line_number":208,"context_line":"        with lin_drv(self.default_uri) as lin:"},{"line_number":209,"context_line":"            if not lin.connected:"},{"line_number":210,"context_line":"                lin.connect()"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"            response \u003d proto.MessageToDict("},{"line_number":213,"context_line":"                lin.storage_pool_list()[0].proto_msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_e382b44f","line":210,"range":{"start_line":208,"start_character":8,"end_line":210,"end_character":29},"in_reply_to":"ffd0ebdf_7d12e75a","updated":"2019-01-04 18:18:07.000000000","message":"+1","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            return response"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _get_api_storage_pool_list(self):"},{"line_number":208,"context_line":"        with lin_drv(self.default_uri) as lin:"},{"line_number":209,"context_line":"            if not lin.connected:"},{"line_number":210,"context_line":"                lin.connect()"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"            response \u003d proto.MessageToDict("},{"line_number":213,"context_line":"                lin.storage_pool_list()[0].proto_msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_a3aeec2b","line":210,"range":{"start_line":208,"start_character":8,"end_line":210,"end_character":29},"in_reply_to":"ffd0ebdf_7d12e75a","updated":"2019-01-04 18:51:22.000000000","message":"I will look into that shortly.  Thank you.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"            response \u003d proto.MessageToDict("},{"line_number":213,"context_line":"                lin.storage_pool_list()[0].proto_msg)"},{"line_number":214,"context_line":"            lin.disconnect()"},{"line_number":215,"context_line":"            return response"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _get_api_volume_extend(self, rsc_target_name, new_size):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_5d192377","line":214,"range":{"start_line":214,"start_character":12,"end_line":214,"end_character":28},"updated":"2019-01-04 16:49:44.000000000","message":"Does exiting the with block cause disconnect to be called?","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"            response \u003d proto.MessageToDict("},{"line_number":213,"context_line":"                lin.storage_pool_list()[0].proto_msg)"},{"line_number":214,"context_line":"            lin.disconnect()"},{"line_number":215,"context_line":"            return response"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _get_api_volume_extend(self, rsc_target_name, new_size):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_837648d8","line":214,"range":{"start_line":214,"start_character":12,"end_line":214,"end_character":28},"in_reply_to":"ffd0ebdf_5d192377","updated":"2019-01-04 18:51:22.000000000","message":"It does, so removed.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            vol_reply \u003d lin.volume_dfn_modify("},{"line_number":223,"context_line":"                rsc_name\u003drsc_target_name,"},{"line_number":224,"context_line":"                volume_nr\u003d0,"},{"line_number":225,"context_line":"                # size\u003dint(new_size * units.Gi / units.Ki))"},{"line_number":226,"context_line":"                size\u003dself._vol_size_to_linstor(new_size))"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"            lin.disconnect()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_bd212fa2","line":225,"updated":"2019-01-04 16:49:44.000000000","message":"Please remove commented out code.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            vol_reply \u003d lin.volume_dfn_modify("},{"line_number":223,"context_line":"                rsc_name\u003drsc_target_name,"},{"line_number":224,"context_line":"                volume_nr\u003d0,"},{"line_number":225,"context_line":"                # size\u003dint(new_size * units.Gi / units.Ki))"},{"line_number":226,"context_line":"                size\u003dself._vol_size_to_linstor(new_size))"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"            lin.disconnect()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_a3734ce7","line":225,"in_reply_to":"ffd0ebdf_bd212fa2","updated":"2019-01-04 18:51:22.000000000","message":"Sorry for the commented codes.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def _get_storage_pool(self):"},{"line_number":431,"context_line":"        # Fetch Storage Pool List"},{"line_number":432,"context_line":"        sp_list_reply \u003d self._get_api_storage_pool_list()"},{"line_number":433,"context_line":"        # assert len(str(sp_list_reply[0].proto_msg)), \"No Storage Pools\""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        # Fetch Resource Definition List"},{"line_number":436,"context_line":"        sp_list \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_7d3bc7d0","line":433,"range":{"start_line":433,"start_character":46,"end_line":433,"end_character":47},"updated":"2019-01-04 16:49:44.000000000","message":"Remove","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def _get_storage_pool(self):"},{"line_number":431,"context_line":"        # Fetch Storage Pool List"},{"line_number":432,"context_line":"        sp_list_reply \u003d self._get_api_storage_pool_list()"},{"line_number":433,"context_line":"        # assert len(str(sp_list_reply[0].proto_msg)), \"No Storage Pools\""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        # Fetch Resource Definition List"},{"line_number":436,"context_line":"        sp_list \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_4380608c","line":433,"range":{"start_line":433,"start_character":46,"end_line":433,"end_character":47},"in_reply_to":"ffd0ebdf_7d3bc7d0","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                        if \u0027freeSpace\u0027 in node:"},{"line_number":462,"context_line":"                            sp_node[\u0027sp_free\u0027] \u003d round("},{"line_number":463,"context_line":"                                int(node[\u0027freeSpace\u0027][\u0027freeCapacity\u0027]) /"},{"line_number":464,"context_line":"                                1048576,"},{"line_number":465,"context_line":"                                2)"},{"line_number":466,"context_line":"                            sp_node[\u0027sp_cap\u0027] \u003d round("},{"line_number":467,"context_line":"                                int(node[\u0027freeSpace\u0027][\u0027totalCapacity\u0027]) /"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_9d38ebd3","line":464,"range":{"start_line":464,"start_character":32,"end_line":464,"end_character":39},"updated":"2019-01-04 16:49:44.000000000","message":"Please use units throughout.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                        if \u0027freeSpace\u0027 in node:"},{"line_number":462,"context_line":"                            sp_node[\u0027sp_free\u0027] \u003d round("},{"line_number":463,"context_line":"                                int(node[\u0027freeSpace\u0027][\u0027freeCapacity\u0027]) /"},{"line_number":464,"context_line":"                                1048576,"},{"line_number":465,"context_line":"                                2)"},{"line_number":466,"context_line":"                            sp_node[\u0027sp_cap\u0027] \u003d round("},{"line_number":467,"context_line":"                                int(node[\u0027freeSpace\u0027][\u0027totalCapacity\u0027]) /"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_034c989c","line":464,"range":{"start_line":464,"start_character":32,"end_line":464,"end_character":39},"in_reply_to":"ffd0ebdf_9d38ebd3","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        data \u003d {}"},{"line_number":494,"context_line":"        data[\"volume_backend_name\"] \u003d self.default_backend_name"},{"line_number":495,"context_line":"        data[\"vendor_name\"] \u003d \u0027Open Source\u0027"},{"line_number":496,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":497,"context_line":"        data[\"pools\"] \u003d []"},{"line_number":498,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_83cf287e","line":495,"range":{"start_line":495,"start_character":30,"end_line":495,"end_character":43},"updated":"2019-01-04 18:18:07.000000000","message":"Is there a reason you aren\u0027t using Linbit here?  Would think that would make more sense.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"e95cc48ce905a5f7aff31120a4a7a63a80db4c00","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        data \u003d {}"},{"line_number":494,"context_line":"        data[\"volume_backend_name\"] \u003d self.default_backend_name"},{"line_number":495,"context_line":"        data[\"vendor_name\"] \u003d \u0027Open Source\u0027"},{"line_number":496,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":497,"context_line":"        data[\"pools\"] \u003d []"},{"line_number":498,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_b512a3b0","line":495,"range":{"start_line":495,"start_character":30,"end_line":495,"end_character":43},"in_reply_to":"ffd0ebdf_83cf287e","updated":"2019-01-04 21:46:08.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        # Free capacity for Local Node"},{"line_number":513,"context_line":"        single_pool \u003d {}"},{"line_number":514,"context_line":"        for sp in sp_data:"},{"line_number":515,"context_line":"            # if sp[\u0027node_name\u0027] \u003d\u003d self.host_name:"},{"line_number":516,"context_line":"            #     # local_free_capacity \u003d sp[\u0027sp_free\u0027]"},{"line_number":517,"context_line":"            #     continue"},{"line_number":518,"context_line":"            if \u0027Diskless\u0027 not in sp[\u0027driver_name\u0027]:"},{"line_number":519,"context_line":"                if \u0027LvmThin\u0027 in sp[\u0027driver_name\u0027]:"},{"line_number":520,"context_line":"                    thin_enabled \u003d True"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_3d353fdb","line":517,"range":{"start_line":515,"start_character":12,"end_line":517,"end_character":26},"updated":"2019-01-04 16:49:44.000000000","message":"Remove","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        # Free capacity for Local Node"},{"line_number":513,"context_line":"        single_pool \u003d {}"},{"line_number":514,"context_line":"        for sp in sp_data:"},{"line_number":515,"context_line":"            # if sp[\u0027node_name\u0027] \u003d\u003d self.host_name:"},{"line_number":516,"context_line":"            #     # local_free_capacity \u003d sp[\u0027sp_free\u0027]"},{"line_number":517,"context_line":"            #     continue"},{"line_number":518,"context_line":"            if \u0027Diskless\u0027 not in sp[\u0027driver_name\u0027]:"},{"line_number":519,"context_line":"                if \u0027LvmThin\u0027 in sp[\u0027driver_name\u0027]:"},{"line_number":520,"context_line":"                    thin_enabled \u003d True"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_e34ab47e","line":517,"range":{"start_line":515,"start_character":12,"end_line":517,"end_character":26},"in_reply_to":"ffd0ebdf_3d353fdb","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                    rd_node[\u0027rd_uuid\u0027] \u003d node[\u0027rscDfnUuid\u0027]"},{"line_number":571,"context_line":"                    rd_node[\u0027rd_name\u0027] \u003d node[\u0027rscName\u0027]"},{"line_number":572,"context_line":"                    rd_node[\u0027rd_port\u0027] \u003d node[\u0027rscDfnPort\u0027]"},{"line_number":573,"context_line":"                    # rd_node[\u0027rd_secret\u0027] \u003d node.rsc_dfn_secret"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"                    if \u0027vlmDfns\u0027 in node:"},{"line_number":576,"context_line":"                        for vol in node[\u0027vlmDfns\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_038a581a","line":573,"range":{"start_line":573,"start_character":19,"end_line":573,"end_character":64},"updated":"2019-01-04 18:18:07.000000000","message":"Please remove.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"e95cc48ce905a5f7aff31120a4a7a63a80db4c00","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                    rd_node[\u0027rd_uuid\u0027] \u003d node[\u0027rscDfnUuid\u0027]"},{"line_number":571,"context_line":"                    rd_node[\u0027rd_name\u0027] \u003d node[\u0027rscName\u0027]"},{"line_number":572,"context_line":"                    rd_node[\u0027rd_port\u0027] \u003d node[\u0027rscDfnPort\u0027]"},{"line_number":573,"context_line":"                    # rd_node[\u0027rd_secret\u0027] \u003d node.rsc_dfn_secret"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"                    if \u0027vlmDfns\u0027 in node:"},{"line_number":576,"context_line":"                        for vol in node[\u0027vlmDfns\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_75243b0e","line":573,"range":{"start_line":573,"start_character":19,"end_line":573,"end_character":64},"in_reply_to":"ffd0ebdf_038a581a","updated":"2019-01-04 21:46:08.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":633,"context_line":""},{"line_number":634,"context_line":"        return node_list"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"    def _debug_api_reply(self, api_response, noerror_only\u003dFalse):"},{"line_number":637,"context_line":"        if noerror_only:"},{"line_number":638,"context_line":"            # Checks if none of the replies has an error"},{"line_number":639,"context_line":"            return lin_drv.all_api_responses_no_error(api_response)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_a3cd8c5e","line":636,"range":{"start_line":636,"start_character":9,"end_line":636,"end_character":23},"updated":"2019-01-04 18:18:07.000000000","message":"This is a nit but this name is kind of confusing as it doesn\u0027t actually seem to print any debug.  Think that it should be _check_api_reply maybe?","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"e95cc48ce905a5f7aff31120a4a7a63a80db4c00","unresolved":false,"context_lines":[{"line_number":633,"context_line":""},{"line_number":634,"context_line":"        return node_list"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"    def _debug_api_reply(self, api_response, noerror_only\u003dFalse):"},{"line_number":637,"context_line":"        if noerror_only:"},{"line_number":638,"context_line":"            # Checks if none of the replies has an error"},{"line_number":639,"context_line":"            return lin_drv.all_api_responses_no_error(api_response)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_351eb3ba","line":636,"range":{"start_line":636,"start_character":9,"end_line":636,"end_character":23},"in_reply_to":"ffd0ebdf_a3cd8c5e","updated":"2019-01-04 21:46:08.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        if not self._debug_api_reply(snap_reply, noerror_only\u003dTrue):"},{"line_number":664,"context_line":"            msg \u003d _(\"ERROR creating a LINSTOR snapshot\")"},{"line_number":665,"context_line":"            LOG.error(msg)"},{"line_number":666,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    def delete_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_83f96881","line":665,"range":{"start_line":665,"start_character":12,"end_line":665,"end_character":20},"updated":"2019-01-04 18:18:07.000000000","message":"There error messages in here would be more useful if they indicated that snapshot that the failure occurred upon.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"e95cc48ce905a5f7aff31120a4a7a63a80db4c00","unresolved":false,"context_lines":[{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        if not self._debug_api_reply(snap_reply, noerror_only\u003dTrue):"},{"line_number":664,"context_line":"            msg \u003d _(\"ERROR creating a LINSTOR snapshot\")"},{"line_number":665,"context_line":"            LOG.error(msg)"},{"line_number":666,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    def delete_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_5576d7da","line":665,"range":{"start_line":665,"start_character":12,"end_line":665,"end_character":20},"in_reply_to":"ffd0ebdf_83f96881","updated":"2019-01-04 21:46:08.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        # Delete RD if no other RSC are found"},{"line_number":680,"context_line":"        if not self._get_snapshot_nodes(drbd_rsc_name):"},{"line_number":681,"context_line":"            # Wait for backend to catch up"},{"line_number":682,"context_line":"            time.sleep(1)"},{"line_number":683,"context_line":"            self._api_rsc_dfn_delete(drbd_rsc_name)"},{"line_number":684,"context_line":"            # rd_reply \u003d self._api_rsc_dfn_delete(drbd_rsc_name)"},{"line_number":685,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_2330bc56","line":682,"range":{"start_line":682,"start_character":12,"end_line":682,"end_character":25},"updated":"2019-01-04 18:18:07.000000000","message":"Sleeps in the code make me nervous.  How do you know 1 second is enough?  Doing a non-blocking looping call here is better practice.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            # Wait for backend to catch up"},{"line_number":682,"context_line":"            time.sleep(1)"},{"line_number":683,"context_line":"            self._api_rsc_dfn_delete(drbd_rsc_name)"},{"line_number":684,"context_line":"            # rd_reply \u003d self._api_rsc_dfn_delete(drbd_rsc_name)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"            # if not self._debug_api_reply(rd_reply):"},{"line_number":687,"context_line":"            #     msg \u003d _(\"ERROR deleting a LINSTOR snapshot RD\")"},{"line_number":688,"context_line":"            #     LOG.error(msg)"},{"line_number":689,"context_line":"            #     raise exception.VolumeBackendAPIException(msg)"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":692,"context_line":"        src_rsc_name \u003d self._drbd_resource_name_from_cinder_snapshot(snapshot)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_5d47e34c","line":689,"range":{"start_line":684,"start_character":12,"end_line":689,"end_character":64},"updated":"2019-01-04 16:49:44.000000000","message":"Remove","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            # Wait for backend to catch up"},{"line_number":682,"context_line":"            time.sleep(1)"},{"line_number":683,"context_line":"            self._api_rsc_dfn_delete(drbd_rsc_name)"},{"line_number":684,"context_line":"            # rd_reply \u003d self._api_rsc_dfn_delete(drbd_rsc_name)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"            # if not self._debug_api_reply(rd_reply):"},{"line_number":687,"context_line":"            #     msg \u003d _(\"ERROR deleting a LINSTOR snapshot RD\")"},{"line_number":688,"context_line":"            #     LOG.error(msg)"},{"line_number":689,"context_line":"            #     raise exception.VolumeBackendAPIException(msg)"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":692,"context_line":"        src_rsc_name \u003d self._drbd_resource_name_from_cinder_snapshot(snapshot)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_a30a6c23","line":689,"range":{"start_line":684,"start_character":12,"end_line":689,"end_character":64},"in_reply_to":"ffd0ebdf_5d47e34c","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":742,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        # Wait for backend to catch up"},{"line_number":745,"context_line":"        time.sleep(2)"},{"line_number":746,"context_line":"        # Manually add the controller node as a resource if diskless"},{"line_number":747,"context_line":"        if self.diskless:"},{"line_number":748,"context_line":"            reply \u003d self._api_rsc_create(rsc_name\u003dnew_vol_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_7d6987bc","line":745,"range":{"start_line":745,"start_character":8,"end_line":745,"end_character":21},"updated":"2019-01-04 16:49:44.000000000","message":"Is this really needed? Make sure it\u0027s mocked out for any unit tests.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":742,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        # Wait for backend to catch up"},{"line_number":745,"context_line":"        time.sleep(2)"},{"line_number":746,"context_line":"        # Manually add the controller node as a resource if diskless"},{"line_number":747,"context_line":"        if self.diskless:"},{"line_number":748,"context_line":"            reply \u003d self._api_rsc_create(rsc_name\u003dnew_vol_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_353233f3","line":745,"range":{"start_line":745,"start_character":8,"end_line":745,"end_character":21},"in_reply_to":"ffd0ebdf_7d6987bc","updated":"2019-01-04 18:51:22.000000000","message":"For the time being, it\u0027s the best I can do.  And it is mocked in the test.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":761,"context_line":"                rsc_target_name\u003dupsize_target_name,"},{"line_number":762,"context_line":"                new_size\u003dnew_vol_size)"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"            if not self._debug_api_reply(reply, noerror_only\u003dTrue):"},{"line_number":765,"context_line":"                msg \u003d _(\u0027Error on extending LINSTOR resource size\u0027)"},{"line_number":766,"context_line":"                LOG.error(msg)"},{"line_number":767,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_bda4cf09","line":764,"updated":"2019-01-04 16:49:44.000000000","message":"Probably good to roll back and delete the volume if this happens, otherwise there will be volumes on the storage that Cinder does not know about since the manager will just see that the creation failed.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":761,"context_line":"                rsc_target_name\u003dupsize_target_name,"},{"line_number":762,"context_line":"                new_size\u003dnew_vol_size)"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"            if not self._debug_api_reply(reply, noerror_only\u003dTrue):"},{"line_number":765,"context_line":"                msg \u003d _(\u0027Error on extending LINSTOR resource size\u0027)"},{"line_number":766,"context_line":"                LOG.error(msg)"},{"line_number":767,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_557d771a","line":764,"in_reply_to":"ffd0ebdf_bda4cf09","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        # Check for Storage Pool List"},{"line_number":771,"context_line":"        sp_data \u003d self._get_storage_pool()"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        # Get default Storage Pool Definition"},{"line_number":774,"context_line":"        # spd_default \u003d self.default_vg_name"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        rsc_size \u003d 1"},{"line_number":777,"context_line":"        if volume[\u0027size\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_dda993df","line":774,"range":{"start_line":773,"start_character":8,"end_line":774,"end_character":44},"updated":"2019-01-04 16:49:44.000000000","message":"Remove","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        # Check for Storage Pool List"},{"line_number":771,"context_line":"        sp_data \u003d self._get_storage_pool()"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        # Get default Storage Pool Definition"},{"line_number":774,"context_line":"        # spd_default \u003d self.default_vg_name"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        rsc_size \u003d 1"},{"line_number":777,"context_line":"        if volume[\u0027size\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_757afb24","line":774,"range":{"start_line":773,"start_character":8,"end_line":774,"end_character":44},"in_reply_to":"ffd0ebdf_dda993df","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":774,"context_line":"        # spd_default \u003d self.default_vg_name"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        rsc_size \u003d 1"},{"line_number":777,"context_line":"        if volume[\u0027size\u0027]:"},{"line_number":778,"context_line":"            rsc_size \u003d volume[\u0027size\u0027]"},{"line_number":779,"context_line":""},{"line_number":780,"context_line":"        # No existing Storage Pools found"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_5db5a330","line":777,"range":{"start_line":777,"start_character":11,"end_line":777,"end_character":25},"updated":"2019-01-04 16:49:44.000000000","message":"volume should always have the size.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":774,"context_line":"        # spd_default \u003d self.default_vg_name"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        rsc_size \u003d 1"},{"line_number":777,"context_line":"        if volume[\u0027size\u0027]:"},{"line_number":778,"context_line":"            rsc_size \u003d volume[\u0027size\u0027]"},{"line_number":779,"context_line":""},{"line_number":780,"context_line":"        # No existing Storage Pools found"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_35747335","line":777,"range":{"start_line":777,"start_character":11,"end_line":777,"end_character":25},"in_reply_to":"ffd0ebdf_5db5a330","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":850,"context_line":"            if node[\u0027node_name\u0027] \u003d\u003d self.host_name:"},{"line_number":851,"context_line":"                ctrl_in_sp \u003d True"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"            # rsc_reply \u003d self._api_rsc_create(rsc_name\u003drsc_name,"},{"line_number":854,"context_line":"            #                                  node_name\u003dnode[\u0027node_name\u0027],"},{"line_number":855,"context_line":"            #                                  diskless\u003dTrue)"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"            # Create resources and,"},{"line_number":858,"context_line":"            # Check only errors when creating diskless resources"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_ddd0b353","line":855,"range":{"start_line":853,"start_character":12,"end_line":855,"end_character":61},"updated":"2019-01-04 16:49:44.000000000","message":"Remove","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":850,"context_line":"            if node[\u0027node_name\u0027] \u003d\u003d self.host_name:"},{"line_number":851,"context_line":"                ctrl_in_sp \u003d True"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"            # rsc_reply \u003d self._api_rsc_create(rsc_name\u003drsc_name,"},{"line_number":854,"context_line":"            #                                  node_name\u003dnode[\u0027node_name\u0027],"},{"line_number":855,"context_line":"            #                                  diskless\u003dTrue)"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"            # Create resources and,"},{"line_number":858,"context_line":"            # Check only errors when creating diskless resources"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_d58e4726","line":855,"range":{"start_line":853,"start_character":12,"end_line":855,"end_character":61},"in_reply_to":"ffd0ebdf_ddd0b353","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":871,"context_line":""},{"line_number":872,"context_line":"        # If the controller is diskless and not in the pool, create a diskless"},{"line_number":873,"context_line":"        # resource on it"},{"line_number":874,"context_line":"        if not ctrl_in_sp and self.diskless:"},{"line_number":875,"context_line":"            rsc_reply \u003d self._api_rsc_create(rsc_name\u003drsc_name,"},{"line_number":876,"context_line":"                                             node_name\u003dself.host_name,"},{"line_number":877,"context_line":"                                             diskless\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_23675c50","line":874,"range":{"start_line":874,"start_character":8,"end_line":874,"end_character":44},"updated":"2019-01-04 18:18:07.000000000","message":"What happens if we fall through here.  Is there an error case being missed here?","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"e95cc48ce905a5f7aff31120a4a7a63a80db4c00","unresolved":false,"context_lines":[{"line_number":871,"context_line":""},{"line_number":872,"context_line":"        # If the controller is diskless and not in the pool, create a diskless"},{"line_number":873,"context_line":"        # resource on it"},{"line_number":874,"context_line":"        if not ctrl_in_sp and self.diskless:"},{"line_number":875,"context_line":"            rsc_reply \u003d self._api_rsc_create(rsc_name\u003drsc_name,"},{"line_number":876,"context_line":"                                             node_name\u003dself.host_name,"},{"line_number":877,"context_line":"                                             diskless\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_35047317","line":874,"range":{"start_line":874,"start_character":8,"end_line":874,"end_character":44},"in_reply_to":"ffd0ebdf_23675c50","updated":"2019-01-04 21:46:08.000000000","message":"Actually this more of an \u0027else\u0027 case.  We merely need to add a reminder to the system that controller is \u0027diskless\u0027 but if it weren\u0027t, the For loop above would have taken care of it already.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":901,"context_line":"                    LOG.error(msg)"},{"line_number":902,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":903,"context_line":"                # Wait for backend to catch up"},{"line_number":904,"context_line":"                time.sleep(1)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"            # Delete VD"},{"line_number":907,"context_line":"            vd_reply \u003d self._api_volume_dfn_delete(drbd_rsc_name, 0)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_8355e852","line":904,"range":{"start_line":904,"start_character":13,"end_line":904,"end_character":29},"updated":"2019-01-04 18:18:07.000000000","message":"Same comment here as above.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":912,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":913,"context_line":""},{"line_number":914,"context_line":"            # Wait for backend to catch up"},{"line_number":915,"context_line":"            time.sleep(1)"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            # Delete RD"},{"line_number":918,"context_line":"            # Will fail if snapshot exists but expected"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_bd592fff","line":915,"range":{"start_line":915,"start_character":12,"end_line":915,"end_character":25},"updated":"2019-01-04 16:49:44.000000000","message":"Any way to have a more deterministic way of doing this? Random sleeps seem like a very bad pattern to follow. What if the system is under heavy load and it takes longer?","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":912,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":913,"context_line":""},{"line_number":914,"context_line":"            # Wait for backend to catch up"},{"line_number":915,"context_line":"            time.sleep(1)"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            # Delete RD"},{"line_number":918,"context_line":"            # Will fail if snapshot exists but expected"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_9598bf6a","line":915,"range":{"start_line":915,"start_character":12,"end_line":915,"end_character":25},"in_reply_to":"ffd0ebdf_bd592fff","updated":"2019-01-04 18:51:22.000000000","message":"I will research more about timing.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":924,"context_line":"        rsc_target_name \u003d self._is_clean_volume_name(volume[\u0027id\u0027],"},{"line_number":925,"context_line":"                                                     DM_VN_PREFIX)"},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"        snap_reply \u003d self._get_api_volume_extend(rsc_target_name, new_size)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        if not self._debug_api_reply(snap_reply, noerror_only\u003dTrue):"},{"line_number":930,"context_line":"            msg \u003d _(\"ERROR Linstor Volume Extend\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_a3d7ccbf","line":927,"range":{"start_line":927,"start_character":7,"end_line":927,"end_character":18},"updated":"2019-01-04 18:18:07.000000000","message":"This seems odd.  Is it a copy paste error?","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"e95cc48ce905a5f7aff31120a4a7a63a80db4c00","unresolved":false,"context_lines":[{"line_number":924,"context_line":"        rsc_target_name \u003d self._is_clean_volume_name(volume[\u0027id\u0027],"},{"line_number":925,"context_line":"                                                     DM_VN_PREFIX)"},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"        snap_reply \u003d self._get_api_volume_extend(rsc_target_name, new_size)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        if not self._debug_api_reply(snap_reply, noerror_only\u003dTrue):"},{"line_number":930,"context_line":"            msg \u003d _(\"ERROR Linstor Volume Extend\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_9808f628","line":927,"range":{"start_line":927,"start_character":7,"end_line":927,"end_character":18},"in_reply_to":"ffd0ebdf_a3d7ccbf","updated":"2019-01-04 21:46:08.000000000","message":"Certainly was.  Thank you.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":973,"context_line":"        return (False, None)"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"    def check_for_setup_error(self):"},{"line_number":976,"context_line":"        pass"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"    def create_export(self, context, volume, connector):"},{"line_number":979,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_7de66719","line":976,"range":{"start_line":976,"start_character":8,"end_line":976,"end_character":12},"updated":"2019-01-04 16:49:44.000000000","message":"Seems like at least checking that proto and linstor are not None would be good to have here.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":973,"context_line":"        return (False, None)"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"    def check_for_setup_error(self):"},{"line_number":976,"context_line":"        pass"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"    def create_export(self, context, volume, connector):"},{"line_number":979,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_55a2579c","line":976,"range":{"start_line":976,"start_character":8,"end_line":976,"end_character":12},"in_reply_to":"ffd0ebdf_7de66719","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":973,"context_line":"        return (False, None)"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"    def check_for_setup_error(self):"},{"line_number":976,"context_line":"        pass"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"    def create_export(self, context, volume, connector):"},{"line_number":979,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_4392a0f8","line":976,"range":{"start_line":976,"start_character":8,"end_line":976,"end_character":12},"in_reply_to":"ffd0ebdf_7de66719","updated":"2019-01-04 18:18:07.000000000","message":"Yeah, we definitely need to check that here and provide a useful error to the user as to how to resolve the problem when it is encountered.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":1013,"context_line":"                db\u003dself.db,"},{"line_number":1014,"context_line":"                executor\u003dself._execute)"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        LOG.info(\u0027START: LINSTOR iSCSI driver \u0027 + self.helper_name)"},{"line_number":1017,"context_line":""},{"line_number":1018,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":1019,"context_line":"        data \u003d self._get_volume_stats()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_7dcf477f","line":1016,"range":{"start_line":1016,"start_character":46,"end_line":1016,"end_character":49},"updated":"2019-01-04 16:49:44.000000000","message":"Use string formatting and pass self.helper_name as an arg to the LOG.info call instead of doing string concatenation.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":1013,"context_line":"                db\u003dself.db,"},{"line_number":1014,"context_line":"                executor\u003dself._execute)"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        LOG.info(\u0027START: LINSTOR iSCSI driver \u0027 + self.helper_name)"},{"line_number":1017,"context_line":""},{"line_number":1018,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":1019,"context_line":"        data \u003d self._get_volume_stats()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_15accf8a","line":1016,"range":{"start_line":1016,"start_character":46,"end_line":1016,"end_character":49},"in_reply_to":"ffd0ebdf_7dcf477f","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d999be12e1cd21ff903816ff517987fb17a6eb1d","unresolved":false,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"    def check_for_setup_error(self):"},{"line_number":1027,"context_line":"        if linstor is None:"},{"line_number":1028,"context_line":"            msg \u003d _(\u0027Linstor not found\u0027)"},{"line_number":1029,"context_line":"            LOG.error(msg)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_43ab801c","line":1028,"range":{"start_line":1028,"start_character":12,"end_line":1028,"end_character":40},"updated":"2019-01-04 18:18:07.000000000","message":"Should have more details here as to what this means.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"e95cc48ce905a5f7aff31120a4a7a63a80db4c00","unresolved":false,"context_lines":[{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"    def check_for_setup_error(self):"},{"line_number":1027,"context_line":"        if linstor is None:"},{"line_number":1028,"context_line":"            msg \u003d _(\u0027Linstor not found\u0027)"},{"line_number":1029,"context_line":"            LOG.error(msg)"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_184ac654","line":1028,"range":{"start_line":1028,"start_character":12,"end_line":1028,"end_character":40},"in_reply_to":"ffd0ebdf_43ab801c","updated":"2019-01-04 21:46:08.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":1095,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":1096,"context_line":"        data \u003d self._get_volume_stats()"},{"line_number":1097,"context_line":"        data[\"storage_protocol\"] \u003d \u0027DRBD\u0027"},{"line_number":1098,"context_line":"        data[\"pools\"][0][\"location_info\"] \u003d \\"},{"line_number":1099,"context_line":"            \u0027LinstorDrbdDriver:\u0027 + data[\"pools\"][0][\"location_info\"]"},{"line_number":1100,"context_line":""},{"line_number":1101,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_5d74c335","line":1098,"range":{"start_line":1098,"start_character":44,"end_line":1098,"end_character":45},"updated":"2019-01-04 16:49:44.000000000","message":"Please don\u0027t use \\ to span multiple lines.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":1095,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":1096,"context_line":"        data \u003d self._get_volume_stats()"},{"line_number":1097,"context_line":"        data[\"storage_protocol\"] \u003d \u0027DRBD\u0027"},{"line_number":1098,"context_line":"        data[\"pools\"][0][\"location_info\"] \u003d \\"},{"line_number":1099,"context_line":"            \u0027LinstorDrbdDriver:\u0027 + data[\"pools\"][0][\"location_info\"]"},{"line_number":1100,"context_line":""},{"line_number":1101,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_35a9d37a","line":1098,"range":{"start_line":1098,"start_character":44,"end_line":1098,"end_character":45},"in_reply_to":"ffd0ebdf_5d74c335","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":1101,"context_line":"        return data"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":"    def check_for_setup_error(self):"},{"line_number":1104,"context_line":"        if linstor is None:"},{"line_number":1105,"context_line":"            msg \u003d _(\u0027Linstor not found\u0027)"},{"line_number":1106,"context_line":"            LOG.error(msg)"},{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":1111,"context_line":"        node_name \u003d connector[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_5d9b6371","line":1108,"range":{"start_line":1104,"start_character":8,"end_line":1108,"end_character":62},"updated":"2019-01-04 16:49:44.000000000","message":"Move this out of the concrete driver implementations into the common base since they are the same for both.","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":1101,"context_line":"        return data"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":"    def check_for_setup_error(self):"},{"line_number":1104,"context_line":"        if linstor is None:"},{"line_number":1105,"context_line":"            msg \u003d _(\u0027Linstor not found\u0027)"},{"line_number":1106,"context_line":"            LOG.error(msg)"},{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":1111,"context_line":"        node_name \u003d connector[\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_55cb3752","line":1108,"range":{"start_line":1104,"start_character":8,"end_line":1108,"end_character":62},"in_reply_to":"ffd0ebdf_5d9b6371","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a20be194c2e89d631297c84fa8d32a10978d6ceb","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"                LOG.error(msg)"},{"line_number":1121,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"            # # Wait for backend to catch up"},{"line_number":1124,"context_line":"            # time.sleep(1)"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"        return self._return_drbd_config(volume)"},{"line_number":1127,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_fd8ed725","line":1124,"range":{"start_line":1123,"start_character":12,"end_line":1124,"end_character":27},"updated":"2019-01-04 16:49:44.000000000","message":"Remove","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":29716,"name":"LINBIT LINSTOR CI","email":"linbit_ci@linbit.com","username":"LINBIT_LINSTOR_CI"},"change_message_id":"1a5459f15e2349e06657de536f44cccea802f7a1","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"                LOG.error(msg)"},{"line_number":1121,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"            # # Wait for backend to catch up"},{"line_number":1124,"context_line":"            # time.sleep(1)"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"        return self._return_drbd_config(volume)"},{"line_number":1127,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffd0ebdf_75c8bb54","line":1124,"range":{"start_line":1123,"start_character":12,"end_line":1124,"end_character":27},"in_reply_to":"ffd0ebdf_fd8ed725","updated":"2019-01-04 18:51:22.000000000","message":"Done","commit_id":"84b2d3d50e2ccf891d41e5b4e75e9ff1dd9c5f51"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"56b0837ea3af2c24fa3645a3683bda7d1407fa00","unresolved":false,"context_lines":[{"line_number":69,"context_line":"               default\u003d4096,"},{"line_number":70,"context_line":"               help\u003d\u0027Default Block size for Image restoration. \u0027"},{"line_number":71,"context_line":"                    \u0027When using iSCSI transport, this option \u0027"},{"line_number":72,"context_line":"                    \u0027specifies the block size\u0027),"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    cfg.BoolOpt(\u0027linstor_controller_diskless\u0027,"},{"line_number":75,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":9,"id":"dfd5e7cf_ab04927c","line":72,"range":{"start_line":72,"start_character":43,"end_line":72,"end_character":46},"updated":"2019-01-07 17:40:26.000000000","message":"Should add a \u0027.\u0027 here at some point given that you did that for the other messages.","commit_id":"8c04a9a92263d771741f03f003b1a6ee6d4be73c"},{"author":{"_account_id":28940,"name":"Woojay Poynter","email":"tenaciouswp@gmail.com","username":"woojay"},"change_message_id":"0f752e3cd9fe79e3eddfd6fb55476f373c365b61","unresolved":false,"context_lines":[{"line_number":69,"context_line":"               default\u003d4096,"},{"line_number":70,"context_line":"               help\u003d\u0027Default Block size for Image restoration. \u0027"},{"line_number":71,"context_line":"                    \u0027When using iSCSI transport, this option \u0027"},{"line_number":72,"context_line":"                    \u0027specifies the block size\u0027),"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    cfg.BoolOpt(\u0027linstor_controller_diskless\u0027,"},{"line_number":75,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":9,"id":"bfdaf3ff_99da26e7","line":72,"range":{"start_line":72,"start_character":43,"end_line":72,"end_character":46},"in_reply_to":"dfd5e7cf_ab04927c","updated":"2019-01-14 18:26:26.000000000","message":"Done.","commit_id":"8c04a9a92263d771741f03f003b1a6ee6d4be73c"}],"doc/source/configuration/block-storage/volume-drivers.rst":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"95f3103202658e1c18d78ca8d797e42b4c979771","unresolved":false,"context_lines":[{"line_number":40,"context_line":"   drivers/dell-emc-vmax-driver"},{"line_number":41,"context_line":"   drivers/dell-emc-vxflex-driver"},{"line_number":42,"context_line":"   drivers/drbd-driver"},{"line_number":43,"context_line":"   drivers/emc-xtremio-driver"},{"line_number":44,"context_line":"   drivers/fujitsu-eternus-dx-driver"},{"line_number":45,"context_line":"   drivers/hpe-3par-driver"},{"line_number":46,"context_line":"   drivers/hpe-lefthand-driver"}],"source_content_type":"text/x-rst","patch_set":9,"id":"dfd5e7cf_7c5bd286","line":43,"updated":"2019-01-07 20:18:22.000000000","message":"This should not have been moved.","commit_id":"8c04a9a92263d771741f03f003b1a6ee6d4be73c"}],"doc/source/reference/support-matrix.ini":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5a2c7798ba3eb261d60ea87a1db1d58665c177d1","unresolved":false,"context_lines":[{"line_number":109,"context_line":"title\u003dLenovo Storage Driver (FC, iSCSI)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"[driver.linbit_linstor]"},{"line_number":112,"context_line":"titl\u003dLinbit DRDB/LINSTOR Driver (LINSTOR)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"[driver.lvm]"},{"line_number":115,"context_line":"title\u003dLogical Volume Manager (LVM) Reference Driver (iSCSI)"}],"source_content_type":"text/x-properties","patch_set":3,"id":"3f79a3b5_3bbf7fcc","line":112,"updated":"2018-12-12 23:19:22.000000000","message":"Type here titl instead of title is causing your doc build problem.","commit_id":"25fa6d144857e91af0135d80d1fb5631882d4937"}]}
