)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"a614fa86af604f57ad885ed7f3694e88a2fe1e06","unresolved":false,"context_lines":[{"line_number":11,"context_line":"performance volume that allocated by cinder from remote backend storage."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"open-cas: https://open-cas.github.io/"},{"line_number":14,"context_line":"Nova Spec: https://review.opendev.org/#/c/689070/"},{"line_number":15,"context_line":"Cinder Spec: https://review.opendev.org/#/c/684556/"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ib120047a65ecbb4ae0f060640d59f3f759a1cade"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ff570b3c_4b5417cb","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":49},"updated":"2020-05-11 08:17:12.000000000","message":"This needs to be re-proposed for Victoria btw.","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"d8b62739f4313b625a6ef5475563bb6a6c442594","unresolved":false,"context_lines":[{"line_number":11,"context_line":"performance volume that allocated by cinder from remote backend storage."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"open-cas: https://open-cas.github.io/"},{"line_number":14,"context_line":"Nova Spec: https://review.opendev.org/#/c/689070/"},{"line_number":15,"context_line":"Cinder Spec: https://review.opendev.org/#/c/684556/"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ib120047a65ecbb4ae0f060640d59f3f759a1cade"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ff570b3c_84233156","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":49},"in_reply_to":"ff570b3c_4b5417cb","updated":"2020-05-18 08:32:04.000000000","message":"done, thanks. https://review.opendev.org/#/c/728778/","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"}],"os_brick/caches/__init__.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"1970003cb4212a1d9a110a9bf5bbe887764767a0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import abc"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from oslo_utils import importutils"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_221bebc9","line":14,"updated":"2020-06-27 22:20:58.000000000","message":"We\u0027re python 3-only now, so you don\u0027t need to use six anymore.","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"7a5fad1170319ee225a78e6ac094928be768e5e1","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import abc"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from oslo_utils import importutils"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_108906c9","line":14,"in_reply_to":"bf51134e_221bebc9","updated":"2020-07-13 09:08:53.000000000","message":"removed, thanks","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"f6576876118c9bfa8bcd53e61c7d60465f73cb30","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if not self.cacheable:"},{"line_number":91,"context_line":"            return self.ori_device_path"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        LOG.info(\"volume before cached:%s\", self.kwargs.get(\u0027dev_path\u0027))"},{"line_number":94,"context_line":"        emulated_disk \u003d self.engine.attach_volume(**self.kwargs)"},{"line_number":95,"context_line":"        LOG.info(\"volume after cached:%s\", emulated_disk)"},{"line_number":96,"context_line":"        return emulated_disk"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_d73c84e2","line":93,"updated":"2020-06-25 21:17:24.000000000","message":"These should probably be LOG.debug but don\u0027t think it is a big deal.","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"7a5fad1170319ee225a78e6ac094928be768e5e1","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if not self.cacheable:"},{"line_number":91,"context_line":"            return self.ori_device_path"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        LOG.info(\"volume before cached:%s\", self.kwargs.get(\u0027dev_path\u0027))"},{"line_number":94,"context_line":"        emulated_disk \u003d self.engine.attach_volume(**self.kwargs)"},{"line_number":95,"context_line":"        LOG.info(\"volume after cached:%s\", emulated_disk)"},{"line_number":96,"context_line":"        return emulated_disk"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_b0a01a44","line":93,"in_reply_to":"bf51134e_827bd7f2","updated":"2020-07-13 09:08:53.000000000","message":"done, thanks","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"1970003cb4212a1d9a110a9bf5bbe887764767a0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if not self.cacheable:"},{"line_number":91,"context_line":"            return self.ori_device_path"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        LOG.info(\"volume before cached:%s\", self.kwargs.get(\u0027dev_path\u0027))"},{"line_number":94,"context_line":"        emulated_disk \u003d self.engine.attach_volume(**self.kwargs)"},{"line_number":95,"context_line":"        LOG.info(\"volume after cached:%s\", emulated_disk)"},{"line_number":96,"context_line":"        return emulated_disk"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_827bd7f2","line":93,"in_reply_to":"bf51134e_d73c84e2","updated":"2020-06-27 22:20:58.000000000","message":"Agree that debug level is more appropriate.  Also, I think you want a space after the : in the message here and at lines 95, 103, and 105.","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"7a5fad1170319ee225a78e6ac094928be768e5e1","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if not self.cacheable:"},{"line_number":91,"context_line":"            return self.ori_device_path"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        LOG.info(\"volume before cached:%s\", self.kwargs.get(\u0027dev_path\u0027))"},{"line_number":94,"context_line":"        emulated_disk \u003d self.engine.attach_volume(**self.kwargs)"},{"line_number":95,"context_line":"        LOG.info(\"volume after cached:%s\", emulated_disk)"},{"line_number":96,"context_line":"        return emulated_disk"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_d09b0e14","line":93,"in_reply_to":"bf51134e_d73c84e2","updated":"2020-07-13 09:08:53.000000000","message":"agreed, thanks","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ff3a235f99e7213b0ac17dbb24125368d956889f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            if eng.is_engine_ready():"},{"line_number":81,"context_line":"                return eng"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ex_msg \u003d _(\"No valid cache engine\")"},{"line_number":84,"context_line":"        raise exception.Invalid(ex_msg)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def attach_volume(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_7c1c0812","line":83,"range":{"start_line":83,"start_character":17,"end_line":83,"end_character":43},"updated":"2020-07-29 19:57:06.000000000","message":"If you do an update, just move this into the Invalid constructor.","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"e6efccbe3fdeeddc870f7d4b56d8cc6427ebe15e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            if eng.is_engine_ready():"},{"line_number":81,"context_line":"                return eng"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ex_msg \u003d _(\"No valid cache engine\")"},{"line_number":84,"context_line":"        raise exception.Invalid(ex_msg)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def attach_volume(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_d642f1aa","line":83,"range":{"start_line":83,"start_character":17,"end_line":83,"end_character":43},"in_reply_to":"9f560f44_7c1c0812","updated":"2020-08-05 10:18:14.000000000","message":"done, thanks","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"}],"os_brick/caches/opencas.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"f6576876118c9bfa8bcd53e61c7d60465f73cb30","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        type    id   disk           status    write policy   device"},{"line_number":33,"context_line":"        cache   1    /dev/nvme0n1   Running   wt             -"},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        cmd \u003d [\u0027casadm\u0027, \u0027-L\u0027]"},{"line_number":36,"context_line":"        kwargs \u003d dict(run_as_root\u003dTrue,"},{"line_number":37,"context_line":"                      root_helper\u003dself._root_helper)"},{"line_number":38,"context_line":"        out, err \u003d self._execute(*cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_77065822","line":35,"updated":"2020-06-25 21:17:24.000000000","message":"Do we need a check somewhere to ensure that casadm is installed?  Otherwise might get errors that are hard to follow?","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"7a5fad1170319ee225a78e6ac094928be768e5e1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        type    id   disk           status    write policy   device"},{"line_number":33,"context_line":"        cache   1    /dev/nvme0n1   Running   wt             -"},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        cmd \u003d [\u0027casadm\u0027, \u0027-L\u0027]"},{"line_number":36,"context_line":"        kwargs \u003d dict(run_as_root\u003dTrue,"},{"line_number":37,"context_line":"                      root_helper\u003dself._root_helper)"},{"line_number":38,"context_line":"        out, err \u003d self._execute(*cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_90beb662","line":35,"in_reply_to":"bf51134e_77065822","updated":"2020-07-13 09:08:53.000000000","message":"added exception catch here, thanks","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"f6576876118c9bfa8bcd53e61c7d60465f73cb30","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        cmd \u003d [\u0027casadm\u0027, \u0027-A\u0027, \u0027-i\u0027, self.cache_id, \u0027-d\u0027, core]"},{"line_number":89,"context_line":"        kwargs \u003d dict(run_as_root\u003dTrue,"},{"line_number":90,"context_line":"                      root_helper\u003dself._root_helper)"},{"line_number":91,"context_line":"        out, err \u003d self._execute(*cmd, **kwargs)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        return self._get_mapped_casdev(core)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_4910dc4e","line":91,"range":{"start_line":91,"start_character":0,"end_line":91,"end_character":48},"updated":"2020-06-25 21:17:24.000000000","message":"Seems that there should be error catching around this with an exception if something goes wrong.","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"7a5fad1170319ee225a78e6ac094928be768e5e1","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        cmd \u003d [\u0027casadm\u0027, \u0027-A\u0027, \u0027-i\u0027, self.cache_id, \u0027-d\u0027, core]"},{"line_number":89,"context_line":"        kwargs \u003d dict(run_as_root\u003dTrue,"},{"line_number":90,"context_line":"                      root_helper\u003dself._root_helper)"},{"line_number":91,"context_line":"        out, err \u003d self._execute(*cmd, **kwargs)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        return self._get_mapped_casdev(core)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_70c322ee","line":91,"range":{"start_line":91,"start_character":0,"end_line":91,"end_character":48},"in_reply_to":"bf51134e_4910dc4e","updated":"2020-07-13 09:08:53.000000000","message":"Done","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"f6576876118c9bfa8bcd53e61c7d60465f73cb30","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        cmd \u003d [\u0027casadm\u0027, \u0027-R\u0027, \u0027-f\u0027, \u0027-i\u0027, self.cache_id, \u0027-j\u0027, coreid]"},{"line_number":97,"context_line":"        kwargs \u003d dict(run_as_root\u003dTrue,"},{"line_number":98,"context_line":"                      root_helper\u003dself._root_helper)"},{"line_number":99,"context_line":"        out, err \u003d self._execute(*cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_e92a907c","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":48},"updated":"2020-06-25 21:17:24.000000000","message":"Same comment here.","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"7a5fad1170319ee225a78e6ac094928be768e5e1","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        cmd \u003d [\u0027casadm\u0027, \u0027-R\u0027, \u0027-f\u0027, \u0027-i\u0027, self.cache_id, \u0027-j\u0027, coreid]"},{"line_number":97,"context_line":"        kwargs \u003d dict(run_as_root\u003dTrue,"},{"line_number":98,"context_line":"                      root_helper\u003dself._root_helper)"},{"line_number":99,"context_line":"        out, err \u003d self._execute(*cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_d0b4ae84","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":48},"in_reply_to":"bf51134e_e92a907c","updated":"2020-07-13 09:08:53.000000000","message":"Done","commit_id":"2524b1493a58048e741ecba2e8ca5118fd5a6075"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d706a4075814dd98bd3aa10df38a40e6fea406c5","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.cache_id \u003d kwargs.get(\u0027opencas_cache_id\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def os_execute(self, *cmd, **kwargs):"},{"line_number":31,"context_line":"        LOG.debug(\u0027os_execute: cmd: %s, args: %s\u0027, cmd, kwargs)"},{"line_number":32,"context_line":"        try:"},{"line_number":33,"context_line":"            out, err \u003d self._execute(*cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_b29c176b","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":18},"updated":"2020-07-21 21:34:13.000000000","message":"I don\u0027t know how I feel about this.  Looking around the os-brick code, we only catch a processutils.ProcessExecutionError in a few places when we want to log a detailed message.  See cryptsetup.py for a few examples.  I guess what\u0027s bothering me is the multiple log lines (lines 35-38), though maybe that\u0027s what would be useful here.","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"e6efccbe3fdeeddc870f7d4b56d8cc6427ebe15e","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.cache_id \u003d kwargs.get(\u0027opencas_cache_id\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def os_execute(self, *cmd, **kwargs):"},{"line_number":31,"context_line":"        LOG.debug(\u0027os_execute: cmd: %s, args: %s\u0027, cmd, kwargs)"},{"line_number":32,"context_line":"        try:"},{"line_number":33,"context_line":"            out, err \u003d self._execute(*cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_d6edd1b7","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":18},"in_reply_to":"bf51134e_b29c176b","updated":"2020-08-05 10:18:14.000000000","message":"sorry for making bothering:)","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5cb8bd35bfca573bfc95d6962c1d3f7bc611118e","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        return False"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def attach_volume(self, **kwargs):"},{"line_number":61,"context_line":"        core \u003d kwargs.get(\u0027dev_path\u0027)"},{"line_number":62,"context_line":"        core \u003d os.path.realpath(core)"},{"line_number":63,"context_line":"        return self._map_casdisk(core)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def detach_volume(self, **kwargs):"},{"line_number":66,"context_line":"        casdev \u003d kwargs.get(\u0027dev_path\u0027)"},{"line_number":67,"context_line":"        coreid, coredev \u003d self._get_mapped_coredev(casdev)"},{"line_number":68,"context_line":"        LOG.info(\"opencas: coreid\u003d%s,coredev\u003d%s\", coreid, coredev)"},{"line_number":69,"context_line":"        self._unmap_casdisk(coreid)"},{"line_number":70,"context_line":"        return coredev"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _get_mapped_casdev(self, core):"},{"line_number":73,"context_line":"        cmd \u003d [\u0027casadm\u0027, \u0027-L\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_f6563ece","line":70,"range":{"start_line":60,"start_character":0,"end_line":70,"end_character":22},"updated":"2020-08-20 13:35:50.000000000","message":"I ran a code coverage report, and these 2 functions are reported as not covered.  But, the functions they call are covered.  The only potential problem I see with these is: what happens if \u0027dev_path\u0027 is missing from kwargs?  Or can that not happen?","commit_id":"e257e0a5a06321ece15d81f9643eaa358fbfb5af"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"5a62c132cfc10c1500729b52489679f2d360b5d9","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        return False"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def attach_volume(self, **kwargs):"},{"line_number":61,"context_line":"        core \u003d kwargs.get(\u0027dev_path\u0027)"},{"line_number":62,"context_line":"        core \u003d os.path.realpath(core)"},{"line_number":63,"context_line":"        return self._map_casdisk(core)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def detach_volume(self, **kwargs):"},{"line_number":66,"context_line":"        casdev \u003d kwargs.get(\u0027dev_path\u0027)"},{"line_number":67,"context_line":"        coreid, coredev \u003d self._get_mapped_coredev(casdev)"},{"line_number":68,"context_line":"        LOG.info(\"opencas: coreid\u003d%s,coredev\u003d%s\", coreid, coredev)"},{"line_number":69,"context_line":"        self._unmap_casdisk(coreid)"},{"line_number":70,"context_line":"        return coredev"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _get_mapped_casdev(self, core):"},{"line_number":73,"context_line":"        cmd \u003d [\u0027casadm\u0027, \u0027-L\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_e8764da4","line":70,"range":{"start_line":60,"start_character":0,"end_line":70,"end_character":22},"in_reply_to":"9f560f44_f6563ece","updated":"2020-08-21 08:00:07.000000000","message":"got catch, thanks Brian. Done. BTW, where to watch the coverage rate please? Or you ran locally?","commit_id":"e257e0a5a06321ece15d81f9643eaa358fbfb5af"}],"os_brick/tests/caches/test_init.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ff3a235f99e7213b0ac17dbb24125368d956889f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from os_brick import caches"},{"line_number":18,"context_line":"from os_brick import exception"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_3ce73015","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":11},"updated":"2020-07-29 19:57:06.000000000","message":"This needs to be updated to use unittest.mock.","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"e6efccbe3fdeeddc870f7d4b56d8cc6427ebe15e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from os_brick import caches"},{"line_number":18,"context_line":"from os_brick import exception"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_f61e15b9","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":11},"in_reply_to":"9f560f44_3ce73015","updated":"2020-08-05 10:18:14.000000000","message":"done, thanks","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"}],"os_brick/tests/caches/test_opencas.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ff3a235f99e7213b0ac17dbb24125368d956889f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from os_brick.caches import opencas"},{"line_number":18,"context_line":"from os_brick.tests import base"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_5ceca4f2","line":15,"updated":"2020-07-29 19:57:06.000000000","message":"Update to \"from unittest import mock\"","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ff3a235f99e7213b0ac17dbb24125368d956889f","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        moc_exec.return_value \u003d (out_not_ready, err)"},{"line_number":46,"context_line":"        ret \u003d engine.is_engine_ready()"},{"line_number":47,"context_line":"        self.assertEqual(ret, False)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        moc_exec.assert_has_calls(["},{"line_number":50,"context_line":"            mock.call(\u0027casadm\u0027, \u0027-L\u0027, run_as_root\u003dTrue, root_helper\u003dNone)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_9cbf5ccf","line":47,"range":{"start_line":47,"start_character":13,"end_line":47,"end_character":24},"updated":"2020-07-29 19:57:06.000000000","message":"assertFalse","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"e6efccbe3fdeeddc870f7d4b56d8cc6427ebe15e","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        moc_exec.return_value \u003d (out_not_ready, err)"},{"line_number":46,"context_line":"        ret \u003d engine.is_engine_ready()"},{"line_number":47,"context_line":"        self.assertEqual(ret, False)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        moc_exec.assert_has_calls(["},{"line_number":50,"context_line":"            mock.call(\u0027casadm\u0027, \u0027-L\u0027, run_as_root\u003dTrue, root_helper\u003dNone)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_d61b11c7","line":47,"range":{"start_line":47,"start_character":13,"end_line":47,"end_character":24},"in_reply_to":"9f560f44_9cbf5ccf","updated":"2020-08-05 10:18:14.000000000","message":"Done, thanks","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ff3a235f99e7213b0ac17dbb24125368d956889f","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        moc_exec.return_value \u003d (out_ready, err)"},{"line_number":62,"context_line":"        ret1 \u003d engine._get_mapped_casdev(\u0027/dev/sdd\u0027)"},{"line_number":63,"context_line":"        self.assertEqual(ret1, \u0027/dev/cas1-1\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027os_brick.executor.Executor._execute\u0027)"},{"line_number":66,"context_line":"    def test_get_mapped_coredev(self, moc_exec):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_dcb9d4e9","line":63,"range":{"start_line":63,"start_character":24,"end_line":63,"end_character":45},"updated":"2020-07-29 19:57:06.000000000","message":"assertEqual argument order should be (EXPECTED, ACTUAL)","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"e6efccbe3fdeeddc870f7d4b56d8cc6427ebe15e","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        moc_exec.return_value \u003d (out_ready, err)"},{"line_number":62,"context_line":"        ret1 \u003d engine._get_mapped_casdev(\u0027/dev/sdd\u0027)"},{"line_number":63,"context_line":"        self.assertEqual(ret1, \u0027/dev/cas1-1\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027os_brick.executor.Executor._execute\u0027)"},{"line_number":66,"context_line":"    def test_get_mapped_coredev(self, moc_exec):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_167f49e0","line":63,"range":{"start_line":63,"start_character":24,"end_line":63,"end_character":45},"in_reply_to":"9f560f44_dcb9d4e9","updated":"2020-08-05 10:18:14.000000000","message":"thanks for your guide, done","commit_id":"5a3a6cac20a3c36dd71ac1a1fbeed8e842a9f7d1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0d7303d72bbbb5b4b7d83b0b414b6728664a396b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from os_brick.tests import base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class OpenCASEngineTestCase(base.TestCase):"},{"line_number":22,"context_line":"    def setUp(self):"},{"line_number":23,"context_line":"        super(OpenCASEngineTestCase, self).setUp()"},{"line_number":24,"context_line":"        self.connection_info \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_aa862464","line":21,"updated":"2020-08-20 02:02:50.000000000","message":"These all test OpenCASEngine.os_execute indirectly, but all for the case where _execute() doesn\u0027t raise an exception.  I think it would be worth having a test for the exception case, just to prevent regressions if someone refactors at some point.","commit_id":"3b1692cafaf14bca47c45d1bc1866d6ba75fad4f"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"e313c8b37cef05b3f6b02e6240ff934b883ef136","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from os_brick.tests import base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class OpenCASEngineTestCase(base.TestCase):"},{"line_number":22,"context_line":"    def setUp(self):"},{"line_number":23,"context_line":"        super(OpenCASEngineTestCase, self).setUp()"},{"line_number":24,"context_line":"        self.connection_info \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f560f44_1bca006d","line":21,"in_reply_to":"9f560f44_aa862464","updated":"2020-08-20 07:53:36.000000000","message":"thanks Brian, added the exception cases.","commit_id":"3b1692cafaf14bca47c45d1bc1866d6ba75fad4f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"bd3763e208a92888f31e18bc96eb06ea3f68b2c0","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        moc_map.return_value \u003d \u0027\u0027"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        args \u003d {\u0027no_dev_path\u0027: \u0027path\u0027}"},{"line_number":137,"context_line":"        self.assertRaises(TypeError, engine.attach_volume, **args)"},{"line_number":138,"context_line":"        self.assertRaises(TypeError, engine.attach_volume)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        # No exception if dev_path set correctly"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f560f44_124907b6","line":137,"updated":"2020-08-24 16:37:49.000000000","message":"You are correct that this would raise a TypeError, but I don\u0027t know how helpful that will be to the operator.  I wonder whether you should check for core !\u003d None before you call os.path.realpath() on it in attach/detach_volume() ?  That means you might be calling _map_casdisk(None) or _get_mapped_coredev(None), but I think that wouldn\u0027t blow up until it hit your os_execute() function, which would log and raise a ProcessExecutionError.  Or you could just raise some appropriate subclass of BrickException (you may have to make up a new one) in attach/detach when you detect that dev_path hasn\u0027t been passed in the kwargs.","commit_id":"84486f6df234aafab78d4581aa4fdc5bbc6ee002"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"dd6fcf6757acfcb3431f4a0491eebcf52eba074a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        moc_map.return_value \u003d \u0027\u0027"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        args \u003d {\u0027no_dev_path\u0027: \u0027path\u0027}"},{"line_number":137,"context_line":"        self.assertRaises(TypeError, engine.attach_volume, **args)"},{"line_number":138,"context_line":"        self.assertRaises(TypeError, engine.attach_volume)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        # No exception if dev_path set correctly"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f560f44_c07afd85","line":137,"in_reply_to":"9f560f44_124907b6","updated":"2020-08-26 07:17:41.000000000","message":"Agreed, thanks Brian. I added the check of None explicitly here and log error \u0026 raise VolumePathsNotFound(It looks like VolumePathsNotFound is appropriate here, I will make a new one if you don\u0027t agree) if it is None.","commit_id":"84486f6df234aafab78d4581aa4fdc5bbc6ee002"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1ed215d350838e3038fdd25e415b074264cc9a51","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"from oslo_concurrency import processutils as putils"},{"line_number":16,"context_line":"from unittest import mock"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from os_brick.caches import opencas"},{"line_number":19,"context_line":"from os_brick import exception"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_7230ec9f","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":25},"updated":"2020-08-28 19:36:55.000000000","message":"Fine in a follow up, but unittest.mock should be imported in a standard library group prior to the third party import from oslo_concurrency.","commit_id":"abd97bb2eb3c3abf5d058fa9e6ab02a61a5ad335"},{"author":{"_account_id":28948,"name":"Liang Fang","email":"liang.a.fang@intel.com","username":"liang"},"change_message_id":"27915bf1176731b45f25b352b3c93482cb0b8e4e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"from oslo_concurrency import processutils as putils"},{"line_number":16,"context_line":"from unittest import mock"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from os_brick.caches import opencas"},{"line_number":19,"context_line":"from os_brick import exception"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_17d875ee","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":25},"in_reply_to":"9f560f44_7230ec9f","updated":"2020-08-31 01:30:37.000000000","message":"Thanks Sean.","commit_id":"abd97bb2eb3c3abf5d058fa9e6ab02a61a5ad335"}]}
