)]}'
{"cinder/tests/unit/volume/drivers/drbdmanage/test_drbdmanagedrv.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"02ac0248a1879f4219fc6a07e8235bd26e2425fd","unresolved":false,"context_lines":[{"line_number":40,"context_line":"import cinder.volume.drivers.drbdmanagedrv as drv"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":43,"context_line":"    DrbdManageFakeDriver"},{"line_number":44,"context_line":")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_475c56ec","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":24},"updated":"2017-09-15 16:20:14.000000000","message":"Should just import drdb_mocks. Classes shouldn\u0027t be imported directly.","commit_id":"bc03476d771f9b73376f5f6b01c4b06077c9d4b5"},{"author":{"_account_id":25972,"name":"Hayley Swimelar","email":"hayley.swimelar@linbit.com","username":"hayswim"},"change_message_id":"6d2a181b6f05a2e9621ef520f11f85e6d2cf3ee0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"import cinder.volume.drivers.drbdmanagedrv as drv"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":43,"context_line":"    DrbdManageFakeDriver"},{"line_number":44,"context_line":")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f2577a7_476fb6fb","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":24},"in_reply_to":"5f2577a7_475c56ec","updated":"2017-09-15 16:45:49.000000000","message":"Done","commit_id":"bc03476d771f9b73376f5f6b01c4b06077c9d4b5"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"d13b5572972a5a56dbbf0b97635b43b51e7e85ca","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_utils import importutils"},{"line_number":21,"context_line":"from oslo_utils import timeutils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"try:"},{"line_number":24,"context_line":"    from drbdmanage import clienthelper"},{"line_number":25,"context_line":"    from drbdmanage.clienthelper import DrbdManageClientHelper as dm_c_h"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"except ImportError as e:"},{"line_number":28,"context_line":"    sys.stderr.write(\"DRBD Manage lib loading: exception %s\\n\" % e)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_b6d32a60","line":25,"range":{"start_line":23,"start_character":0,"end_line":25,"end_character":72},"updated":"2017-09-15 20:10:43.000000000","message":"For the unit tests you should always use the mock, right? I don\u0027t think the unit tests should change behavior based on what modules are installed on the system.","commit_id":"d756d940e87d47727e2d74566ae7dcf448443a37"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5f9779efbc7c1f9bf2efcee8387cef7ac24f2e5d","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    from drbdmanage.clienthelper import DrbdManageClientHelper as dm_c_h"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"except ImportError as e:"},{"line_number":28,"context_line":"    sys.stderr.write(\"DRBD Manage lib loading: exception %s\\n\" % e)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":31,"context_line":"        clienthelper"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_96a14efb","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":20},"updated":"2017-09-15 20:28:38.000000000","message":"Should probably do this as a log instead of using sys.stderr","commit_id":"d756d940e87d47727e2d74566ae7dcf448443a37"}],"cinder/tests/unit/volume/drivers/test_drbdmanagedrv.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6b4976a62b15c88739b6e589277f320ff7a9c832","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"try:"},{"line_number":29,"context_line":"    import cinder.volume.drivers.drbdmanagedrv as drv"},{"line_number":30,"context_line":"    from drbdmanage import clienthelper"},{"line_number":31,"context_line":"    from drbdmanage.clienthelper import DrbdManageClientHelper as dm_c_h"},{"line_number":32,"context_line":"    import drbdmanage.consts as mock_dm_consts"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff0f0b1f_d61ff158","line":29,"updated":"2017-05-22 18:01:48.000000000","message":"External library calls should be mocked out. The unit tests should be able to run without an external client being installed.","commit_id":"f751f318ad24f949d4a454e7ed5dfc1adfe3fa8d"},{"author":{"_account_id":25972,"name":"Hayley Swimelar","email":"hayley.swimelar@linbit.com","username":"hayswim"},"change_message_id":"4bccdb1264e585d0c27ce32089e8085b340e70d1","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"try:"},{"line_number":29,"context_line":"    import cinder.volume.drivers.drbdmanagedrv as drv"},{"line_number":30,"context_line":"    from drbdmanage import clienthelper"},{"line_number":31,"context_line":"    from drbdmanage.clienthelper import DrbdManageClientHelper as dm_c_h"},{"line_number":32,"context_line":"    import drbdmanage.consts as mock_dm_consts"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_63f56583","line":29,"in_reply_to":"ff0f0b1f_d61ff158","updated":"2017-06-07 18:42:52.000000000","message":"Done","commit_id":"f751f318ad24f949d4a454e7ed5dfc1adfe3fa8d"}],"cinder/volume/drivers/drbdmanagedrv.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6b4976a62b15c88739b6e589277f320ff7a9c832","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014-2016 LINBIT HA Solutions GmbH"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff0f0b1f_963df9c5","line":1,"range":{"start_line":1,"start_character":24,"end_line":1,"end_character":25},"updated":"2017-05-22 18:01:48.000000000","message":"Might want to update to 2017 now?","commit_id":"f751f318ad24f949d4a454e7ed5dfc1adfe3fa8d"},{"author":{"_account_id":25972,"name":"Hayley Swimelar","email":"hayley.swimelar@linbit.com","username":"hayswim"},"change_message_id":"4bccdb1264e585d0c27ce32089e8085b340e70d1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014-2016 LINBIT HA Solutions GmbH"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_e3097595","line":1,"range":{"start_line":1,"start_character":24,"end_line":1,"end_character":25},"in_reply_to":"ff0f0b1f_963df9c5","updated":"2017-06-07 18:42:52.000000000","message":"Done","commit_id":"f751f318ad24f949d4a454e7ed5dfc1adfe3fa8d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6b4976a62b15c88739b6e589277f320ff7a9c832","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # Fake DrbdManageClientHelper, in case DRBD Manage isn\u0027t installed"},{"line_number":64,"context_line":"    # (eg. pylint, pep8, ...)"},{"line_number":65,"context_line":"    class dm_client_helper(object):"},{"line_number":66,"context_line":"        odm \u003d None"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        def _fetch_answer_data(self, res, key, level\u003dNone, req\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff0f0b1f_76adc5e7","line":65,"updated":"2017-05-22 18:01:48.000000000","message":"Should fake out a class (nor inherit from it) in the actual code. This should be imported and used from the external lib, and its existence should be checked in check_for_setup_error.","commit_id":"f751f318ad24f949d4a454e7ed5dfc1adfe3fa8d"},{"author":{"_account_id":25972,"name":"Hayley Swimelar","email":"hayley.swimelar@linbit.com","username":"hayswim"},"change_message_id":"4bccdb1264e585d0c27ce32089e8085b340e70d1","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # Fake DrbdManageClientHelper, in case DRBD Manage isn\u0027t installed"},{"line_number":64,"context_line":"    # (eg. pylint, pep8, ...)"},{"line_number":65,"context_line":"    class dm_client_helper(object):"},{"line_number":66,"context_line":"        odm \u003d None"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        def _fetch_answer_data(self, res, key, level\u003dNone, req\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_a3037d73","line":65,"in_reply_to":"ff0f0b1f_76adc5e7","updated":"2017-06-07 18:42:52.000000000","message":"Done","commit_id":"f751f318ad24f949d4a454e7ed5dfc1adfe3fa8d"},{"author":{"_account_id":14339,"name":"Philipp Marek","email":"philipp.marek@linbit.com","username":"pmarek"},"change_message_id":"886a2c1efab1b3f35359779390770a3b3f7adab1","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # Fake DrbdManageClientHelper, in case DRBD Manage isn\u0027t installed"},{"line_number":64,"context_line":"    # (eg. pylint, pep8, ...)"},{"line_number":65,"context_line":"    class dm_client_helper(object):"},{"line_number":66,"context_line":"        odm \u003d None"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        def _fetch_answer_data(self, res, key, level\u003dNone, req\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff0f0b1f_0420819a","line":65,"in_reply_to":"ff0f0b1f_76adc5e7","updated":"2017-05-23 05:18:13.000000000","message":"Just as additional information: this is only used during the PEP8 and similar gerrit tests.\n\nWithout that they just break because the \"drbdmanagedrv\" libraries are not available; in other words, this here just fakes enough to make the dry-run syntax test suite run successfully.","commit_id":"f751f318ad24f949d4a454e7ed5dfc1adfe3fa8d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"cf4a4499882e82e7654fdb77eab6095510f21fe9","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            # We must not call the VolumeDriver\u0027s local_path,"},{"line_number":420,"context_line":"            # but the DrbdManageClientHelper\u0027s."},{"line_number":421,"context_line":"            return dm_client_helper.local_path(self, d_res_name, d_vol_nr)"},{"line_number":422,"context_line":"        except Exception as e:"},{"line_number":423,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de.message)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _push_drbd_options(self, d_res_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f231b9d_772f263f","line":422,"range":{"start_line":422,"start_character":15,"end_line":422,"end_character":24},"updated":"2017-06-13 20:29:14.000000000","message":"Is there a more specific exception we can catch on these?","commit_id":"ff34d9f5fe55002cf046b4f1a8a97df56f8e89ab"},{"author":{"_account_id":25972,"name":"Hayley Swimelar","email":"hayley.swimelar@linbit.com","username":"hayswim"},"change_message_id":"4592f0a887feece25ca6aab94380bfd466a25737","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            # We must not call the VolumeDriver\u0027s local_path,"},{"line_number":420,"context_line":"            # but the DrbdManageClientHelper\u0027s."},{"line_number":421,"context_line":"            return dm_client_helper.local_path(self, d_res_name, d_vol_nr)"},{"line_number":422,"context_line":"        except Exception as e:"},{"line_number":423,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de.message)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _push_drbd_options(self, d_res_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f2577a7_c7a1bdab","line":422,"range":{"start_line":422,"start_character":15,"end_line":422,"end_character":24},"in_reply_to":"7f231b9d_772f263f","updated":"2017-09-12 20:29:33.000000000","message":"Done","commit_id":"ff34d9f5fe55002cf046b4f1a8a97df56f8e89ab"},{"author":{"_account_id":25972,"name":"Hayley Swimelar","email":"hayley.swimelar@linbit.com","username":"hayswim"},"change_message_id":"2089ad33feec0d911058988536fef0edd65cef0b","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            # We must not call the VolumeDriver\u0027s local_path,"},{"line_number":420,"context_line":"            # but the DrbdManageClientHelper\u0027s."},{"line_number":421,"context_line":"            return dm_client_helper.local_path(self, d_res_name, d_vol_nr)"},{"line_number":422,"context_line":"        except Exception as e:"},{"line_number":423,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de.message)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _push_drbd_options(self, d_res_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f231b9d_f76d7632","line":422,"range":{"start_line":422,"start_character":15,"end_line":422,"end_character":24},"in_reply_to":"7f231b9d_772f263f","updated":"2017-06-13 20:38:34.000000000","message":"The underlying implementation throws Exception, but I agree that\u0027s probably too general.\n\nLet me check with the upstream developers.","commit_id":"ff34d9f5fe55002cf046b4f1a8a97df56f8e89ab"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"d13b5572972a5a56dbbf0b97635b43b51e7e85ca","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    # Fake DrbdManageClientHelper, etc. in case DRBD Manage isn\u0027t installed"},{"line_number":51,"context_line":"    # (eg. pylint, pep8, ...)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":54,"context_line":"        clienthelper"},{"line_number":55,"context_line":"    )"},{"line_number":56,"context_line":"    from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_16ad5ee8","line":53,"updated":"2017-09-15 20:10:43.000000000","message":"I don\u0027t think you want to do this in the driver, it shouldn\u0027t fall back to the mocks here. Just define them as None and error out in the drivers do_setup method.","commit_id":"d756d940e87d47727e2d74566ae7dcf448443a37"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5f9779efbc7c1f9bf2efcee8387cef7ac24f2e5d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from oslo_utils import importutils"},{"line_number":35,"context_line":"from oslo_utils import units"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"try:"},{"line_number":38,"context_line":"    import dbus"},{"line_number":39,"context_line":"    from drbdmanage import clienthelper"},{"line_number":40,"context_line":"    from drbdmanage.clienthelper import ("},{"line_number":41,"context_line":"        DrbdManageClientHelper as dm_client_helper"},{"line_number":42,"context_line":"    )"},{"line_number":43,"context_line":"    import drbdmanage.consts as dm_const"},{"line_number":44,"context_line":"    import drbdmanage.exceptions as dm_exc"},{"line_number":45,"context_line":"    import drbdmanage.utils as dm_utils"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"except ImportError:"},{"line_number":48,"context_line":"    # Used for the tests, when no DRBDmanage is installed"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    # Fake DrbdManageClientHelper, etc. in case DRBD Manage isn\u0027t installed"},{"line_number":51,"context_line":"    # (eg. pylint, pep8, ...)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":54,"context_line":"        clienthelper"},{"line_number":55,"context_line":"    )"},{"line_number":56,"context_line":"    from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":57,"context_line":"        dbus"},{"line_number":58,"context_line":"    )"},{"line_number":59,"context_line":"    from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":60,"context_line":"        dm_client_helper"},{"line_number":61,"context_line":"    )"},{"line_number":62,"context_line":"    from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":63,"context_line":"        dm_consts as dm_const"},{"line_number":64,"context_line":"    )"},{"line_number":65,"context_line":"    from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":66,"context_line":"        dm_exc"},{"line_number":67,"context_line":"    )"},{"line_number":68,"context_line":"    from cinder.tests.unit.volume.drivers.drbdmanage.drbd_mocks import ("},{"line_number":69,"context_line":"        dm_utils"},{"line_number":70,"context_line":"    )"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"from cinder import exception"},{"line_number":73,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_9634ae94","line":70,"range":{"start_line":37,"start_character":0,"end_line":70,"end_character":5},"updated":"2017-09-15 20:28:38.000000000","message":"This isn\u0027t really how we normally handle this in drivers.  Normally we try to import the libraries and if we can\u0027t we mark a variable indicating failure.  Then in the setup function we error letting the user know that the library isn\u0027t installed and needs to be added for proper function of the driver rather than just mocking out the code.\n\nI think that is what we should do here.  As far as getting CI to run, you should be running your CI system with the needed packages installed to more accurately simulate what a real running environment looks like.","commit_id":"d756d940e87d47727e2d74566ae7dcf448443a37"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5f9779efbc7c1f9bf2efcee8387cef7ac24f2e5d","unresolved":false,"context_lines":[{"line_number":146,"context_line":"class DrbdManageBaseDriver(driver.VolumeDriver, dm_client_helper):"},{"line_number":147,"context_line":"    \"\"\"Cinder driver that uses DRBDmanage for storage.\"\"\""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    VERSION \u003d \u00271.1.1\u0027"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    # From/for DrbdManageClientHelper"},{"line_number":152,"context_line":"    logger \u003d LOG"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_b6de8a0e","line":149,"range":{"start_line":149,"start_character":4,"end_line":149,"end_character":21},"updated":"2017-09-15 20:28:38.000000000","message":"Lets make this a docstring so the the history of your driver is documented.  I.E.  https://github.com/openstack/cinder/blob/master/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_iscsi.py","commit_id":"d756d940e87d47727e2d74566ae7dcf448443a37"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5f9779efbc7c1f9bf2efcee8387cef7ac24f2e5d","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                        {\u0027try\u0027: retry, \u0027host\u0027: nodenames, \u0027res\u0027: res_name,"},{"line_number":305,"context_line":"                         \u0027vol\u0027: vol_nr})"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"            seconds \u003d min(0.5 + retry / 5, 2)"},{"line_number":308,"context_line":"            if clienthelper:"},{"line_number":309,"context_line":"                clienthelper.delay_for(seconds)"},{"line_number":310,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f2577a7_56b406d1","line":307,"updated":"2017-09-15 20:28:38.000000000","message":"This needs to be replaced with a fixed interval looping call.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py#L1240","commit_id":"d756d940e87d47727e2d74566ae7dcf448443a37"}]}
