)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"29ed64938cb033314e5e148976a41060e0116424","unresolved":false,"context_lines":[{"line_number":21,"context_line":"  running on which RSD node."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Implements: blueprint nvme-volume-driver"},{"line_number":24,"context_line":"Signed-off-by: Yingxin \u003cyingxin.cheng@intel.com\u003e"},{"line_number":25,"context_line":"Change-Id: I26e3dc140b2cf30a97665679fdc4d2f897cd4872"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_da247ec6","line":24,"updated":"2018-11-28 03:52:32.000000000","message":"No need Signed-off-by.","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"5c90c7dbb9428c04ee71c3d8d09d736cfa917d55","unresolved":false,"context_lines":[{"line_number":21,"context_line":"  running on which RSD node."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Implements: blueprint nvme-volume-driver"},{"line_number":24,"context_line":"Signed-off-by: Yingxin \u003cyingxin.cheng@intel.com\u003e"},{"line_number":25,"context_line":"Change-Id: I26e3dc140b2cf30a97665679fdc4d2f897cd4872"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_8b3a3a93","line":24,"in_reply_to":"3f79a3b5_da247ec6","updated":"2018-11-28 07:36:23.000000000","message":"Done","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"}],"os_brick/initiator/connector.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"b568b56e6c787553175b4d552cea220cc311d875","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    initiator.NVME:"},{"line_number":118,"context_line":"        \u0027os_brick.initiator.connectors.nvme.NVMeConnector\u0027,"},{"line_number":119,"context_line":"    initiator.NVMEOF:"},{"line_number":120,"context_line":"        \u0027os_brick.initiator.connectors.nvme.NVMeConnector\u0027,"},{"line_number":121,"context_line":"}"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"# Mapping for the S390X platform"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_90b38d98","line":120,"updated":"2019-03-12 18:46:41.000000000","message":"This change was completely unnecessary.  I don\u0027t see a point of creating a new protocol that just points to an existing connector.","commit_id":"891abdff2f56be724a272641790eea173e977686"}],"os_brick/initiator/connectors/nvme.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"29ed64938cb033314e5e148976a41060e0116424","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import re"},{"line_number":14,"context_line":"import subprocess"},{"line_number":15,"context_line":"import time"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_concurrency import lockutils"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_babbc271","line":14,"updated":"2018-11-28 03:52:32.000000000","message":"-1, please see following comments, this is not needed.","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"5c90c7dbb9428c04ee71c3d8d09d736cfa917d55","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import re"},{"line_number":14,"context_line":"import subprocess"},{"line_number":15,"context_line":"import time"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_concurrency import lockutils"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_eb4ace22","line":14,"in_reply_to":"3f79a3b5_babbc271","updated":"2018-11-28 07:36:23.000000000","message":"Done","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"29ed64938cb033314e5e148976a41060e0116424","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # RSD requires system_uuid to let Cinder RSD Driver identify"},{"line_number":50,"context_line":"        # Nova node for later RSD volume attachment."},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            uuid \u003d subprocess.check_output("},{"line_number":53,"context_line":"                \"sudo /usr/sbin/dmidecode | grep UUID\","},{"line_number":54,"context_line":"                shell\u003dTrue)"},{"line_number":55,"context_line":"            uuid \u003d str(uuid).strip()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9ab84678","line":52,"updated":"2018-11-28 03:52:32.000000000","message":"-1, use self._execute() to run the command.","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"5c90c7dbb9428c04ee71c3d8d09d736cfa917d55","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # RSD requires system_uuid to let Cinder RSD Driver identify"},{"line_number":50,"context_line":"        # Nova node for later RSD volume attachment."},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            uuid \u003d subprocess.check_output("},{"line_number":53,"context_line":"                \"sudo /usr/sbin/dmidecode | grep UUID\","},{"line_number":54,"context_line":"                shell\u003dTrue)"},{"line_number":55,"context_line":"            uuid \u003d str(uuid).strip()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_cb5d92eb","line":52,"in_reply_to":"3f79a3b5_9ab84678","updated":"2018-11-28 07:36:23.000000000","message":"Fixed, thanks!","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"29ed64938cb033314e5e148976a41060e0116424","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def get_connector_properties(root_helper, *args, **kwargs):"},{"line_number":70,"context_line":"        \"\"\"The NVMe connector properties.\"\"\""},{"line_number":71,"context_line":"        uuid \u003d NVMeConnector._get_system_uuid()"},{"line_number":72,"context_line":"        if uuid:"},{"line_number":73,"context_line":"            return {\"system uuid\": uuid}"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5a638e18","line":72,"updated":"2018-11-28 03:52:32.000000000","message":"Should we check here:\nif not uuid:\n    return {\"system_uuid\": uuid}","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"0ab9d1608124de96b046fc197919b8371c08dbc4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def get_connector_properties(root_helper, *args, **kwargs):"},{"line_number":70,"context_line":"        \"\"\"The NVMe connector properties.\"\"\""},{"line_number":71,"context_line":"        uuid \u003d NVMeConnector._get_system_uuid()"},{"line_number":72,"context_line":"        if uuid:"},{"line_number":73,"context_line":"            return {\"system uuid\": uuid}"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_504dad6d","line":72,"in_reply_to":"3f79a3b5_5a638e18","updated":"2018-11-28 05:46:54.000000000","message":"Sorry please ignore this comment. It is not correct.","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eca69d9f69c5ddae53b4b4fe02177e5661b11ad8","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        if host_nqn:"},{"line_number":147,"context_line":"            cmd.extend([\u0027-q\u0027, host_nqn])"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            LOG.debug(\"execute: %s\" % \" \".join(str(item) for item in cmd))"},{"line_number":150,"context_line":"            self._execute(*cmd, root_helper\u003dself._root_helper,"},{"line_number":151,"context_line":"                          run_as_root\u003dTrue)"},{"line_number":152,"context_line":"        except putils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_33982917","line":149,"updated":"2018-11-28 22:25:07.000000000","message":"This looks like it was put here for development purposes.  Could it be removed?","commit_id":"91964112d0e7c708567d71f82c673f5765836312"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"db3b7a1ef477a116003fdd8298faba3bfc6e948e","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        if host_nqn:"},{"line_number":147,"context_line":"            cmd.extend([\u0027-q\u0027, host_nqn])"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            LOG.debug(\"execute: %s\" % \" \".join(str(item) for item in cmd))"},{"line_number":150,"context_line":"            self._execute(*cmd, root_helper\u003dself._root_helper,"},{"line_number":151,"context_line":"                          run_as_root\u003dTrue)"},{"line_number":152,"context_line":"        except putils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_8521a50c","line":149,"in_reply_to":"3f79a3b5_33982917","updated":"2018-11-29 15:35:08.000000000","message":"Done","commit_id":"91964112d0e7c708567d71f82c673f5765836312"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eca69d9f69c5ddae53b4b4fe02177e5661b11ad8","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            \u0027-d\u0027,"},{"line_number":207,"context_line":"            device_path]"},{"line_number":208,"context_line":"        try:"},{"line_number":209,"context_line":"            LOG.debug(\"execute: %s\" % \" \".join(str(item) for item in cmd))"},{"line_number":210,"context_line":"            self._execute("},{"line_number":211,"context_line":"                *cmd,"},{"line_number":212,"context_line":"                root_helper\u003dself._root_helper,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d38215a6","line":209,"updated":"2018-11-28 22:25:07.000000000","message":"This also looks like it could be removed.","commit_id":"91964112d0e7c708567d71f82c673f5765836312"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"db3b7a1ef477a116003fdd8298faba3bfc6e948e","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            \u0027-d\u0027,"},{"line_number":207,"context_line":"            device_path]"},{"line_number":208,"context_line":"        try:"},{"line_number":209,"context_line":"            LOG.debug(\"execute: %s\" % \" \".join(str(item) for item in cmd))"},{"line_number":210,"context_line":"            self._execute("},{"line_number":211,"context_line":"                *cmd,"},{"line_number":212,"context_line":"                root_helper\u003dself._root_helper,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_65300956","line":209,"in_reply_to":"3f79a3b5_d38215a6","updated":"2018-11-29 15:35:08.000000000","message":"Done","commit_id":"91964112d0e7c708567d71f82c673f5765836312"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"12974b28d54cd9b5e0e47650085920553c9ee8dd","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                    uuid \u003d line.split(\" \")[1]"},{"line_number":62,"context_line":"                    LOG.debug(\"got system uuid: %s\" % uuid)"},{"line_number":63,"context_line":"                    return uuid"},{"line_number":64,"context_line":"            LOG.error(\"Cannot get system uuid from %s\" % out)"},{"line_number":65,"context_line":"            return \"\""},{"line_number":66,"context_line":"        except putils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"            LOG.warn(\"Unable to locate dmidecode. For Cinder RSD \""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_83dd1314","line":64,"updated":"2018-11-30 02:58:54.000000000","message":"A warning is enough. As it may be not an error in other platforms instead of RSD.\nOr add something like \"ignore this error if not in RSD.\"","commit_id":"46d39b5082f71562952b5470842708c47296551c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"bb419193283238a053bb514cd37325f2f5f3a8b1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                    uuid \u003d line.split(\" \")[1]"},{"line_number":62,"context_line":"                    LOG.debug(\"got system uuid: %s\" % uuid)"},{"line_number":63,"context_line":"                    return uuid"},{"line_number":64,"context_line":"            LOG.error(\"Cannot get system uuid from %s\" % out)"},{"line_number":65,"context_line":"            return \"\""},{"line_number":66,"context_line":"        except putils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"            LOG.warn(\"Unable to locate dmidecode. For Cinder RSD \""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_a0f02195","line":64,"in_reply_to":"3f79a3b5_83dd1314","updated":"2018-12-03 01:40:03.000000000","message":"Done","commit_id":"46d39b5082f71562952b5470842708c47296551c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"fe99f727d59bd5a0f25c1cfe0ce3a190b6f89f4a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            device_scan_attempts\u003ddevice_scan_attempts,"},{"line_number":44,"context_line":"            *args, **kwargs)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def get_system_uuid(self):"},{"line_number":47,"context_line":"        # RSD requires system_uuid to let Cinder RSD Driver identify"},{"line_number":48,"context_line":"        # Nova node for later RSD volume attachment."},{"line_number":49,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_8e87f311","line":46,"updated":"2018-12-06 16:33:13.000000000","message":"This should be a private method named as _get_system_uuid, I believe.","commit_id":"ae589169e29d04d952e207ef7ef023491a645c95"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"0bc6643ab478d5ea26a48bc461305ac0ecc772ca","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            device_scan_attempts\u003ddevice_scan_attempts,"},{"line_number":44,"context_line":"            *args, **kwargs)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def get_system_uuid(self):"},{"line_number":47,"context_line":"        # RSD requires system_uuid to let Cinder RSD Driver identify"},{"line_number":48,"context_line":"        # Nova node for later RSD volume attachment."},{"line_number":49,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_482f8856","line":46,"in_reply_to":"3f79a3b5_8e87f311","updated":"2018-12-07 01:31:54.000000000","message":"Done","commit_id":"ae589169e29d04d952e207ef7ef023491a645c95"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9f4920d1c7d07484f310b6f77163a73f51bda6f4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                     root_helper\u003dself._root_helper,"},{"line_number":52,"context_line":"                                     run_as_root\u003dTrue)"},{"line_number":53,"context_line":"            if err:"},{"line_number":54,"context_line":"                LOG.warn(\"Unable to execute dmidecode. For Cinder RSD \""},{"line_number":55,"context_line":"                         \"Backend, please make sure it is installed: %s\""},{"line_number":56,"context_line":"                         % err)"},{"line_number":57,"context_line":"                return \"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_be404b07","line":54,"range":{"start_line":54,"start_character":20,"end_line":54,"end_character":24},"updated":"2018-12-13 17:13:24.000000000","message":"LOG.warn is deprecated, this should be updated to use LOG.warning.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"987dd18dfac09451f582615cd9846e785c6a371c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                     root_helper\u003dself._root_helper,"},{"line_number":52,"context_line":"                                     run_as_root\u003dTrue)"},{"line_number":53,"context_line":"            if err:"},{"line_number":54,"context_line":"                LOG.warn(\"Unable to execute dmidecode. For Cinder RSD \""},{"line_number":55,"context_line":"                         \"Backend, please make sure it is installed: %s\""},{"line_number":56,"context_line":"                         % err)"},{"line_number":57,"context_line":"                return \"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_a0626141","line":54,"range":{"start_line":54,"start_character":20,"end_line":54,"end_character":24},"in_reply_to":"3f79a3b5_be404b07","updated":"2018-12-14 05:53:16.000000000","message":"Done","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9f4920d1c7d07484f310b6f77163a73f51bda6f4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            if err:"},{"line_number":54,"context_line":"                LOG.warn(\"Unable to execute dmidecode. For Cinder RSD \""},{"line_number":55,"context_line":"                         \"Backend, please make sure it is installed: %s\""},{"line_number":56,"context_line":"                         % err)"},{"line_number":57,"context_line":"                return \"\""},{"line_number":58,"context_line":"            for line in out.split(\"\\n\"):"},{"line_number":59,"context_line":"                line \u003d line.strip()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_fe0483c6","line":56,"range":{"start_line":56,"start_character":25,"end_line":56,"end_character":26},"updated":"2018-12-13 17:13:24.000000000","message":"Don\u0027t perform string formatting up front. Change \"%\" to \",\" to pass in the formatting value as an arg to the logger.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"987dd18dfac09451f582615cd9846e785c6a371c","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            if err:"},{"line_number":54,"context_line":"                LOG.warn(\"Unable to execute dmidecode. For Cinder RSD \""},{"line_number":55,"context_line":"                         \"Backend, please make sure it is installed: %s\""},{"line_number":56,"context_line":"                         % err)"},{"line_number":57,"context_line":"                return \"\""},{"line_number":58,"context_line":"            for line in out.split(\"\\n\"):"},{"line_number":59,"context_line":"                line \u003d line.strip()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_c05f5d76","line":56,"range":{"start_line":56,"start_character":25,"end_line":56,"end_character":26},"in_reply_to":"3f79a3b5_fe0483c6","updated":"2018-12-14 05:53:16.000000000","message":"Done","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9f4920d1c7d07484f310b6f77163a73f51bda6f4","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                line \u003d line.strip()"},{"line_number":60,"context_line":"                if line.startswith(\"UUID:\"):"},{"line_number":61,"context_line":"                    uuid \u003d line.split(\" \")[1]"},{"line_number":62,"context_line":"                    LOG.debug(\"got system uuid: %s\" % uuid)"},{"line_number":63,"context_line":"                    return uuid"},{"line_number":64,"context_line":"            LOG.warn(\"Cannot get system uuid from %s\" % out)"},{"line_number":65,"context_line":"            return \"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_deebc7eb","line":62,"range":{"start_line":62,"start_character":52,"end_line":62,"end_character":53},"updated":"2018-12-13 17:13:24.000000000","message":"Change to , throughout.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"987dd18dfac09451f582615cd9846e785c6a371c","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                line \u003d line.strip()"},{"line_number":60,"context_line":"                if line.startswith(\"UUID:\"):"},{"line_number":61,"context_line":"                    uuid \u003d line.split(\" \")[1]"},{"line_number":62,"context_line":"                    LOG.debug(\"got system uuid: %s\" % uuid)"},{"line_number":63,"context_line":"                    return uuid"},{"line_number":64,"context_line":"            LOG.warn(\"Cannot get system uuid from %s\" % out)"},{"line_number":65,"context_line":"            return \"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_606c4934","line":62,"range":{"start_line":62,"start_character":52,"end_line":62,"end_character":53},"in_reply_to":"3f79a3b5_deebc7eb","updated":"2018-12-14 05:53:16.000000000","message":"Done","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"ff33ec119708e9eae656965da8ed8af5645684f4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    return uuid"},{"line_number":64,"context_line":"            LOG.warn(\"Cannot get system uuid from %s\" % out)"},{"line_number":65,"context_line":"            return \"\""},{"line_number":66,"context_line":"        except putils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"            LOG.warn(\"Unable to locate dmidecode. For Cinder RSD \""},{"line_number":68,"context_line":"                     \"Backend, please make sure it is installed: %s\" % e)"},{"line_number":69,"context_line":"            return \"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @staticmethod"},{"line_number":72,"context_line":"    def get_connector_properties(root_helper, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_d1317558","line":69,"range":{"start_line":66,"start_character":0,"end_line":69,"end_character":21},"updated":"2018-12-13 20:56:42.000000000","message":"Why do we have this warning here as well as above.  Won\u0027t you just get this one in the case that dmidecode isn\u0027t installed?","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"987dd18dfac09451f582615cd9846e785c6a371c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    return uuid"},{"line_number":64,"context_line":"            LOG.warn(\"Cannot get system uuid from %s\" % out)"},{"line_number":65,"context_line":"            return \"\""},{"line_number":66,"context_line":"        except putils.ProcessExecutionError as e:"},{"line_number":67,"context_line":"            LOG.warn(\"Unable to locate dmidecode. For Cinder RSD \""},{"line_number":68,"context_line":"                     \"Backend, please make sure it is installed: %s\" % e)"},{"line_number":69,"context_line":"            return \"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @staticmethod"},{"line_number":72,"context_line":"    def get_connector_properties(root_helper, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_e0c61915","line":69,"range":{"start_line":66,"start_character":0,"end_line":69,"end_character":21},"in_reply_to":"3f79a3b5_d1317558","updated":"2018-12-14 05:53:16.000000000","message":"Thanks, if dmidecode is not installed, only this one will be printed. Changed the previous warning message.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"ff33ec119708e9eae656965da8ed8af5645684f4","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _get_nvme_devices(self):"},{"line_number":91,"context_line":"        nvme_devices \u003d []"},{"line_number":92,"context_line":"        pattern \u003d r\u0027/dev/nvme[0-9]+n[0-9]+\u0027"},{"line_number":93,"context_line":"        cmd \u003d [\u0027nvme\u0027, \u0027list\u0027]"},{"line_number":94,"context_line":"        for retry in range(1, self.device_scan_attempts + 1):"},{"line_number":95,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_d11ad5c6","line":92,"updated":"2018-12-13 20:56:42.000000000","message":"Since we are making changes it might be good to add a comment here as to what the pattern is for so that people don\u0027t play with it.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"987dd18dfac09451f582615cd9846e785c6a371c","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _get_nvme_devices(self):"},{"line_number":91,"context_line":"        nvme_devices \u003d []"},{"line_number":92,"context_line":"        pattern \u003d r\u0027/dev/nvme[0-9]+n[0-9]+\u0027"},{"line_number":93,"context_line":"        cmd \u003d [\u0027nvme\u0027, \u0027list\u0027]"},{"line_number":94,"context_line":"        for retry in range(1, self.device_scan_attempts + 1):"},{"line_number":95,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_c0cd1d2e","line":92,"in_reply_to":"3f79a3b5_d11ad5c6","updated":"2018-12-14 05:53:16.000000000","message":"Done, and it is also tested in the UT.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9f4920d1c7d07484f310b6f77163a73f51bda6f4","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            path \u003d set(all_nvme_devices) - set(current_nvme_devices)"},{"line_number":160,"context_line":"            if path:"},{"line_number":161,"context_line":"                break"},{"line_number":162,"context_line":"            time.sleep(retry ** 2)"},{"line_number":163,"context_line":"        else:"},{"line_number":164,"context_line":"            raise exception.TargetPortalNotFound(target_portal)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_7e1153f9","line":162,"updated":"2018-12-13 17:13:24.000000000","message":"Probably better to put this in a method that can be decorated with the @retry decorator. Make sure the retry value is mocked properly in unit tests to make sure test runs don\u0027t have any unnecessary delays.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"987dd18dfac09451f582615cd9846e785c6a371c","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            path \u003d set(all_nvme_devices) - set(current_nvme_devices)"},{"line_number":160,"context_line":"            if path:"},{"line_number":161,"context_line":"                break"},{"line_number":162,"context_line":"            time.sleep(retry ** 2)"},{"line_number":163,"context_line":"        else:"},{"line_number":164,"context_line":"            raise exception.TargetPortalNotFound(target_portal)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_80d725be","line":162,"in_reply_to":"3f79a3b5_7e1153f9","updated":"2018-12-14 05:53:16.000000000","message":"Done, thanks.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ef7522034adc413437b875b0e8a7793a8919fb50","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            path \u003d set(all_nvme_devices) - set(current_nvme_devices)"},{"line_number":160,"context_line":"            if path:"},{"line_number":161,"context_line":"                break"},{"line_number":162,"context_line":"            time.sleep(retry ** 2)"},{"line_number":163,"context_line":"        else:"},{"line_number":164,"context_line":"            raise exception.TargetPortalNotFound(target_portal)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_1f8e0f7b","line":162,"in_reply_to":"3f79a3b5_80d725be","updated":"2018-12-14 07:38:02.000000000","message":"The related UT are already mocking the sleep function, and the timing shows no delay is introduced.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"}],"os_brick/tests/initiator/connectors/test_nvme.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"29ed64938cb033314e5e148976a41060e0116424","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        expected_props \u003d {}"},{"line_number":50,"context_line":"        self.assertEqual(expected_props, props)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @mock.patch.object(subprocess, \u0027check_output\u0027)"},{"line_number":53,"context_line":"    def test_get_connector_properties_with_sysuuid("},{"line_number":54,"context_line":"            self, mock_output):"},{"line_number":55,"context_line":"        mock_output.return_value \u003d\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_3a6c9203","line":52,"updated":"2018-11-28 03:52:32.000000000","message":"Please refer to Line 71.","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"5c90c7dbb9428c04ee71c3d8d09d736cfa917d55","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        expected_props \u003d {}"},{"line_number":50,"context_line":"        self.assertEqual(expected_props, props)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @mock.patch.object(subprocess, \u0027check_output\u0027)"},{"line_number":53,"context_line":"    def test_get_connector_properties_with_sysuuid("},{"line_number":54,"context_line":"            self, mock_output):"},{"line_number":55,"context_line":"        mock_output.return_value \u003d\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_2b6e8696","line":52,"in_reply_to":"3f79a3b5_3a6c9203","updated":"2018-11-28 07:36:23.000000000","message":"Done","commit_id":"417c2165381bd1f4bb551343dc977e22e1a4e5ee"}],"releasenotes/notes/nvme-rsd-support-d487afd77c534fa1.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9f4920d1c7d07484f310b6f77163a73f51bda6f4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support RSD Scenario of nvme connector.  Cinder RSD Driver needs"},{"line_number":5,"context_line":"    system-uuid to identify which RSD node runs the nova-cpu service.  And when"},{"line_number":6,"context_line":"    establish connection from initiator to target, host-nqn parameter may need"},{"line_number":7,"context_line":"    to be specified."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3f79a3b5_de874715","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":42},"updated":"2018-12-13 17:13:24.000000000","message":"This should be reworded and overall has too many details. Something like \"Added NVMEoF connector.\"","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"987dd18dfac09451f582615cd9846e785c6a371c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Support RSD Scenario of nvme connector.  Cinder RSD Driver needs"},{"line_number":5,"context_line":"    system-uuid to identify which RSD node runs the nova-cpu service.  And when"},{"line_number":6,"context_line":"    establish connection from initiator to target, host-nqn parameter may need"},{"line_number":7,"context_line":"    to be specified."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3f79a3b5_e0dff9d0","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":42},"in_reply_to":"3f79a3b5_de874715","updated":"2018-12-14 05:53:16.000000000","message":"Thanks, done. Please review the new description.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9f4920d1c7d07484f310b6f77163a73f51bda6f4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    to be specified."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Add the retry and sleep logic to get the connected nvme device.  Because it"},{"line_number":11,"context_line":"    is observed that sometimes `nvme list` has some delays to show the newly"},{"line_number":12,"context_line":"    connected devices."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3f79a3b5_9e91cf53","line":10,"updated":"2018-12-13 17:13:24.000000000","message":"Remove all of this section.","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"987dd18dfac09451f582615cd9846e785c6a371c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    to be specified."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Add the retry and sleep logic to get the connected nvme device.  Because it"},{"line_number":11,"context_line":"    is observed that sometimes `nvme list` has some delays to show the newly"},{"line_number":12,"context_line":"    connected devices."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3f79a3b5_20e651b4","line":10,"in_reply_to":"3f79a3b5_9e91cf53","updated":"2018-12-14 05:53:16.000000000","message":"Done","commit_id":"2802c73293cbc8f9de64df2e40618558247cee8d"}]}
