)]}'
{"cinder/volume/drivers/stx/client.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"713d44ecd1935e5f25b7bd699d09e6450ce237f6","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        Long-deprecated commands have or will be removed."},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        if self._fw_type \u003d\u003d \u0027I\u0027:"},{"line_number":259,"context_line":"            return True"},{"line_number":260,"context_line":"        if self._fw_type \u003d\u003d \u0027V\u0027:"},{"line_number":261,"context_line":"            return True"},{"line_number":262,"context_line":"        if self._fw_type \u003d\u003d \u0027G\u0027 and self._fw_rev \u003e\u003d 280:"},{"line_number":263,"context_line":"            return True"},{"line_number":264,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_14333cc6","line":261,"range":{"start_line":258,"start_character":8,"end_line":261,"end_character":23},"updated":"2020-10-01 10:03:17.000000000","message":"it could be simplified to:\nif self._fw_type in [\u0027I\u0027, \u0027V\u0027]:","commit_id":"51b790421f0df6b838c639e303e163a59d10b81d"},{"author":{"_account_id":17042,"name":"Chris M","email":"cinder@tristero.net","username":"pots"},"change_message_id":"ec6bd477a1c45a49c12ecc264dc83c125f9ca478","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        Long-deprecated commands have or will be removed."},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        if self._fw_type \u003d\u003d \u0027I\u0027:"},{"line_number":259,"context_line":"            return True"},{"line_number":260,"context_line":"        if self._fw_type \u003d\u003d \u0027V\u0027:"},{"line_number":261,"context_line":"            return True"},{"line_number":262,"context_line":"        if self._fw_type \u003d\u003d \u0027G\u0027 and self._fw_rev \u003e\u003d 280:"},{"line_number":263,"context_line":"            return True"},{"line_number":264,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_50759b96","line":261,"range":{"start_line":258,"start_character":8,"end_line":261,"end_character":23},"in_reply_to":"9f560f44_14333cc6","updated":"2020-10-05 16:45:53.000000000","message":"Done","commit_id":"51b790421f0df6b838c639e303e163a59d10b81d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"713d44ecd1935e5f25b7bd699d09e6450ce237f6","unresolved":false,"context_lines":[{"line_number":691,"context_line":"        \"\"\"Get the array firmware version\"\"\""},{"line_number":692,"context_line":"        tree \u003d self._request(\"/show/controllers\")"},{"line_number":693,"context_line":"        s \u003d tree.xpath(\"//PROPERTY[@name\u003d\u0027sc-fw\u0027]\")[0].text"},{"line_number":694,"context_line":"        if len(s) \u003e 0:"},{"line_number":695,"context_line":"            self._fw_type \u003d s[0]"},{"line_number":696,"context_line":"            self._fw_rev \u003d int(re.match(\u0027^[^0-9]*([0-9]+).*\u0027, s).groups()[0])"},{"line_number":697,"context_line":"            LOG.debug(\"Array firmware is %s (%s%d)\\n\","}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_f4d2085b","line":694,"range":{"start_line":694,"start_character":8,"end_line":694,"end_character":22},"updated":"2020-10-01 10:03:17.000000000","message":"nit: it could be simplified to:\nif len(s):","commit_id":"51b790421f0df6b838c639e303e163a59d10b81d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b41f73f206af760d7fe3cc5948a592587faf64d9","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def is_titanium(self):"},{"line_number":250,"context_line":"        \"\"\"True for older array firmware.\"\"\""},{"line_number":251,"context_line":"        return True if self._fw_type \u003d\u003d \u0027T\u0027 else False"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def is_g5_fw(self):"},{"line_number":254,"context_line":"        \"\"\"Identify firmware updated in/after 2020."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_3afa8642","line":251,"range":{"start_line":251,"start_character":8,"end_line":251,"end_character":54},"updated":"2020-10-04 19:05:08.000000000","message":"This would be better as just:\n\nreturn self._fw_type \u003d\u003d \u0027T\u0027","commit_id":"0f8aca991d1155f5b23222fd034c69632d5c3ae1"},{"author":{"_account_id":17042,"name":"Chris M","email":"cinder@tristero.net","username":"pots"},"change_message_id":"ec6bd477a1c45a49c12ecc264dc83c125f9ca478","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def is_titanium(self):"},{"line_number":250,"context_line":"        \"\"\"True for older array firmware.\"\"\""},{"line_number":251,"context_line":"        return True if self._fw_type \u003d\u003d \u0027T\u0027 else False"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def is_g5_fw(self):"},{"line_number":254,"context_line":"        \"\"\"Identify firmware updated in/after 2020."}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_eae31333","line":251,"range":{"start_line":251,"start_character":8,"end_line":251,"end_character":54},"in_reply_to":"9f560f44_3afa8642","updated":"2020-10-05 16:45:53.000000000","message":"Done","commit_id":"0f8aca991d1155f5b23222fd034c69632d5c3ae1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4791c79ca649709e8fadc081bd5d4d28c0874432","unresolved":false,"context_lines":[{"line_number":691,"context_line":"        s \u003d tree.xpath(\"//PROPERTY[@name\u003d\u0027sc-fw\u0027]\")[0].text"},{"line_number":692,"context_line":"        if len(s):"},{"line_number":693,"context_line":"            self._fw_type \u003d s[0]"},{"line_number":694,"context_line":"            self._fw_rev \u003d int(re.match(\u0027^[^0-9]*([0-9]+).*\u0027, s).groups()[0])"},{"line_number":695,"context_line":"            LOG.debug(\"Array firmware is %s (%s%d)\\n\","},{"line_number":696,"context_line":"                      s, self._fw_type, self._fw_rev)"},{"line_number":697,"context_line":"        return s"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_81f082dc","line":694,"range":{"start_line":694,"start_character":31,"end_line":694,"end_character":76},"updated":"2020-10-05 14:25:47.000000000","message":"I don\u0027t know if this matters, but because of the chaining here, if the content of the XML doesn\u0027t match the pattern, this is going to barf with a AttributeError: \u0027NoneType\u0027 object has no attribute \u0027groups\u0027.  It might be better to set m \u003d re.match() and then only set _fw_rev is m isn\u0027t None, which would leave it at its initialized value of zero.  Unless that would be worse ... you know your backend better than I do.","commit_id":"0f8aca991d1155f5b23222fd034c69632d5c3ae1"},{"author":{"_account_id":17042,"name":"Chris M","email":"cinder@tristero.net","username":"pots"},"change_message_id":"ec6bd477a1c45a49c12ecc264dc83c125f9ca478","unresolved":false,"context_lines":[{"line_number":691,"context_line":"        s \u003d tree.xpath(\"//PROPERTY[@name\u003d\u0027sc-fw\u0027]\")[0].text"},{"line_number":692,"context_line":"        if len(s):"},{"line_number":693,"context_line":"            self._fw_type \u003d s[0]"},{"line_number":694,"context_line":"            self._fw_rev \u003d int(re.match(\u0027^[^0-9]*([0-9]+).*\u0027, s).groups()[0])"},{"line_number":695,"context_line":"            LOG.debug(\"Array firmware is %s (%s%d)\\n\","},{"line_number":696,"context_line":"                      s, self._fw_type, self._fw_rev)"},{"line_number":697,"context_line":"        return s"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_4accbfba","line":694,"range":{"start_line":694,"start_character":31,"end_line":694,"end_character":76},"in_reply_to":"9f560f44_81f082dc","updated":"2020-10-05 16:45:53.000000000","message":"Done","commit_id":"0f8aca991d1155f5b23222fd034c69632d5c3ae1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"2a5c66f16b6eb21df981e4af2c75513f8a5a3c4c","unresolved":false,"context_lines":[{"line_number":695,"context_line":"            if not fw_rev_match:"},{"line_number":696,"context_line":"                LOG.error(\u0027firmware revision not found in \"%s\"\u0027, s)"},{"line_number":697,"context_line":"                return s"},{"line_number":698,"context_line":"            LOG.debug(\"Array firmware is %s (%s%d)\\n\","},{"line_number":699,"context_line":"                      s, self._fw_type, self._fw_rev)"},{"line_number":700,"context_line":"            self._fw_rev \u003d int(fw_rev_match.groups()[0])"},{"line_number":701,"context_line":"            LOG.debug(\"Array firmware is %s (%s%d)\\n\","},{"line_number":702,"context_line":"                      s, self._fw_type, self._fw_rev)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_1d84ca0a","line":699,"range":{"start_line":698,"start_character":0,"end_line":699,"end_character":53},"updated":"2020-10-06 01:29:35.000000000","message":"Did you mean to log the previous value here, or is this a copy/paste fail?  If you do want to log twice, it would be a good idea to make the messages different so that will be clear to someone reading the logs.","commit_id":"57fcedb7887072d2d0b86d32c68814bdf0fb14e9"}],"releasenotes/notes/msa2060-99150398a9c416f6.yaml":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4791c79ca649709e8fadc081bd5d4d28c0874432","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":"    The HPE MSA drivers now include support for the HPE MSA 2060 and MSA 1060"},{"line_number":5,"context_line":"    storage arrays."},{"line_number":6,"context_line":"fixes:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    The HPE MSA driver was updated to use the latest version of the MSA API"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9f560f44_41b66afb","line":5,"range":{"start_line":4,"start_character":0,"end_line":5,"end_character":19},"updated":"2020-10-05 14:25:47.000000000","message":"Combine this into the \"fixes\" note below and remove this section (backporting a feature is not allowed).","commit_id":"0f8aca991d1155f5b23222fd034c69632d5c3ae1"},{"author":{"_account_id":17042,"name":"Chris M","email":"cinder@tristero.net","username":"pots"},"change_message_id":"ec6bd477a1c45a49c12ecc264dc83c125f9ca478","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":"    The HPE MSA drivers now include support for the HPE MSA 2060 and MSA 1060"},{"line_number":5,"context_line":"    storage arrays."},{"line_number":6,"context_line":"fixes:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    The HPE MSA driver was updated to use the latest version of the MSA API"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9f560f44_eaf03394","line":5,"range":{"start_line":4,"start_character":0,"end_line":5,"end_character":19},"in_reply_to":"9f560f44_41b66afb","updated":"2020-10-05 16:45:53.000000000","message":"Done","commit_id":"0f8aca991d1155f5b23222fd034c69632d5c3ae1"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"4791c79ca649709e8fadc081bd5d4d28c0874432","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    storage arrays."},{"line_number":6,"context_line":"fixes:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    The HPE MSA driver was updated to use the latest version of the MSA API"},{"line_number":9,"context_line":"    syntax when communicating with newer firmware, as certain older,"},{"line_number":10,"context_line":"    deprecated commands have been removed."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9f560f44_c1e8bae0","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":42},"updated":"2020-10-05 14:25:47.000000000","message":"Please use the format described here: https://docs.openstack.org/cinder/latest/contributor/releasenotes.html#drivers","commit_id":"0f8aca991d1155f5b23222fd034c69632d5c3ae1"},{"author":{"_account_id":17042,"name":"Chris M","email":"cinder@tristero.net","username":"pots"},"change_message_id":"ec6bd477a1c45a49c12ecc264dc83c125f9ca478","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    storage arrays."},{"line_number":6,"context_line":"fixes:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    The HPE MSA driver was updated to use the latest version of the MSA API"},{"line_number":9,"context_line":"    syntax when communicating with newer firmware, as certain older,"},{"line_number":10,"context_line":"    deprecated commands have been removed."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9f560f44_caebafa1","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":42},"in_reply_to":"9f560f44_c1e8bae0","updated":"2020-10-05 16:45:53.000000000","message":"Done","commit_id":"0f8aca991d1155f5b23222fd034c69632d5c3ae1"}]}
