)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c67349de10669d047fbf2017e82175b9579fe6dc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"storage array. The 3PAR drivers will now use this information to"},{"line_number":11,"context_line":"enable/disable standard stat reporting for thin provisioning,"},{"line_number":12,"context_line":"QoS support and replication"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint 3par-license-check"},{"line_number":15,"context_line":"Change-Id: Ib5fb06b1c029d026f6f38fa3fdf7d62c2005c06e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a7e1126_84ae617f","line":13,"updated":"2015-12-18 22:54:19.000000000","message":"Please add DocImpact as additional licenses are needed.","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"75e5984dcb32a81aae22b7d52aaad718d8b92e7e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"storage array. The 3PAR drivers will now use this information to"},{"line_number":11,"context_line":"enable/disable standard stat reporting for thin provisioning,"},{"line_number":12,"context_line":"QoS support and replication"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements: blueprint 3par-license-check"},{"line_number":15,"context_line":"Change-Id: Ib5fb06b1c029d026f6f38fa3fdf7d62c2005c06e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a7e1126_448cf9d9","line":13,"in_reply_to":"3a7e1126_84ae617f","updated":"2015-12-18 23:14:07.000000000","message":"Done - We have documented most of the licenses required here http://docs.openstack.org/liberty/config-reference/content/hp-3par-sys-reqs.html But it\u0027s a good idea to say we will be disabling capabilities now based on them.","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"}],"cinder/tests/unit/test_hpe3par.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c67349de10669d047fbf2017e82175b9579fe6dc","unresolved":false,"context_lines":[{"line_number":5373,"context_line":"        config.goodness_function \u003d GOODNESS_FUNCTION"},{"line_number":5374,"context_line":"        mock_client \u003d self.setup_driver(config\u003dconfig, wsapi_version\u003dwsapi)"},{"line_number":5375,"context_line":"        mock_client.getCPG.return_value \u003d self.cpgs[0]"},{"line_number":5376,"context_line":"        # Purposely left out the Thin Provisioning  license in"},{"line_number":5377,"context_line":"        # getStorageSystemInfo to test that thin_provisioning_support returns"},{"line_number":5378,"context_line":"        # False."},{"line_number":5379,"context_line":"        mock_client.getStorageSystemInfo.return_value \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_04191122","line":5376,"updated":"2015-12-18 22:54:19.000000000","message":"Remove extra space before \"license\".","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"75e5984dcb32a81aae22b7d52aaad718d8b92e7e","unresolved":false,"context_lines":[{"line_number":5373,"context_line":"        config.goodness_function \u003d GOODNESS_FUNCTION"},{"line_number":5374,"context_line":"        mock_client \u003d self.setup_driver(config\u003dconfig, wsapi_version\u003dwsapi)"},{"line_number":5375,"context_line":"        mock_client.getCPG.return_value \u003d self.cpgs[0]"},{"line_number":5376,"context_line":"        # Purposely left out the Thin Provisioning  license in"},{"line_number":5377,"context_line":"        # getStorageSystemInfo to test that thin_provisioning_support returns"},{"line_number":5378,"context_line":"        # False."},{"line_number":5379,"context_line":"        mock_client.getStorageSystemInfo.return_value \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_044d91c3","line":5376,"in_reply_to":"3a7e1126_04191122","updated":"2015-12-18 23:14:07.000000000","message":"Done","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"}],"cinder/volume/drivers/hpe/hpe_3par_common.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5214e7516cb60a343d56a03c7b11cc18b16f1bc6","unresolved":false,"context_lines":[{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def _check_license_enabled(self, valid_licenses,"},{"line_number":1273,"context_line":"                               license_to_check, capability):"},{"line_number":1274,"context_line":"        \"\"\"check a license against valid licenses on the array.\"\"\""},{"line_number":1275,"context_line":"        if self.valid_licenses:"},{"line_number":1276,"context_line":"            for license in self.valid_licenses:"},{"line_number":1277,"context_line":"                if license_to_check in license.get(\u0027name\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_ee0ce6ee","line":1274,"range":{"start_line":1274,"start_character":11,"end_line":1274,"end_character":16},"updated":"2015-12-18 21:37:11.000000000","message":"Super minor nit - if you do another update it would probably be good to start this with an upper C.","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"75e5984dcb32a81aae22b7d52aaad718d8b92e7e","unresolved":false,"context_lines":[{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"    def _check_license_enabled(self, valid_licenses,"},{"line_number":1273,"context_line":"                               license_to_check, capability):"},{"line_number":1274,"context_line":"        \"\"\"check a license against valid licenses on the array.\"\"\""},{"line_number":1275,"context_line":"        if self.valid_licenses:"},{"line_number":1276,"context_line":"            for license in self.valid_licenses:"},{"line_number":1277,"context_line":"                if license_to_check in license.get(\u0027name\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_447f1915","line":1274,"range":{"start_line":1274,"start_character":11,"end_line":1274,"end_character":16},"in_reply_to":"3a7e1126_ee0ce6ee","updated":"2015-12-18 23:14:07.000000000","message":"Done","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5214e7516cb60a343d56a03c7b11cc18b16f1bc6","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"                       \"license which is not installed.\") %"},{"line_number":1281,"context_line":"                      {\u0027capability\u0027: capability,"},{"line_number":1282,"context_line":"                       \u0027license\u0027: license_to_check})"},{"line_number":1283,"context_line":"            return False"},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"    def _get_vlun(self, volume_name, hostname, lun_id\u003dNone, nsp\u003dNone):"},{"line_number":1286,"context_line":"        \"\"\"find a VLUN on a 3PAR host.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_2eff4eab","line":1283,"range":{"start_line":1283,"start_character":12,"end_line":1283,"end_character":18},"updated":"2015-12-18 21:37:11.000000000","message":"Indented too far? I think this needs to be shifted left so it\u0027s not just returning if self.valid_licenses is true.","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"75e5984dcb32a81aae22b7d52aaad718d8b92e7e","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"                       \"license which is not installed.\") %"},{"line_number":1281,"context_line":"                      {\u0027capability\u0027: capability,"},{"line_number":1282,"context_line":"                       \u0027license\u0027: license_to_check})"},{"line_number":1283,"context_line":"            return False"},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"    def _get_vlun(self, volume_name, hostname, lun_id\u003dNone, nsp\u003dNone):"},{"line_number":1286,"context_line":"        \"\"\"find a VLUN on a 3PAR host.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_24d76dee","line":1283,"range":{"start_line":1283,"start_character":12,"end_line":1283,"end_character":18},"in_reply_to":"3a7e1126_2eff4eab","updated":"2015-12-18 23:14:07.000000000","message":"Done - Not all the firmware versions the driver supports are returning the valid licenses, so I was going to error on the safe side, but since I\u0027m checking before I even call the function that valid license query was successful, it would be better to move it as you suggested.","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c67349de10669d047fbf2017e82175b9579fe6dc","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"                       \"license which is not installed.\") %"},{"line_number":1281,"context_line":"                      {\u0027capability\u0027: capability,"},{"line_number":1282,"context_line":"                       \u0027license\u0027: license_to_check})"},{"line_number":1283,"context_line":"            return False"},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"    def _get_vlun(self, volume_name, hostname, lun_id\u003dNone, nsp\u003dNone):"},{"line_number":1286,"context_line":"        \"\"\"find a VLUN on a 3PAR host.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_c491c948","line":1283,"range":{"start_line":1283,"start_character":12,"end_line":1283,"end_character":18},"in_reply_to":"3a7e1126_2eff4eab","updated":"2015-12-18 22:54:19.000000000","message":"Good point.  There\u0027s no explicit return for \"if not self.valid_licenses\" in this function.","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"75e5984dcb32a81aae22b7d52aaad718d8b92e7e","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"                       \"license which is not installed.\") %"},{"line_number":1281,"context_line":"                      {\u0027capability\u0027: capability,"},{"line_number":1282,"context_line":"                       \u0027license\u0027: license_to_check})"},{"line_number":1283,"context_line":"            return False"},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"    def _get_vlun(self, volume_name, hostname, lun_id\u003dNone, nsp\u003dNone):"},{"line_number":1286,"context_line":"        \"\"\"find a VLUN on a 3PAR host.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_64549552","line":1283,"range":{"start_line":1283,"start_character":12,"end_line":1283,"end_character":18},"in_reply_to":"3a7e1126_c491c948","updated":"2015-12-18 23:14:07.000000000","message":"Done","commit_id":"402526a3179ac0903dc986202a3514e0044691b4"},{"author":{"_account_id":11903,"name":"Anthony Lee","email":"anthony.mic.lee@hpe.com","username":"leeantho"},"change_message_id":"c58900c02d0e41bf1373390770449e8b423b4b71","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"                               license_to_check, capability):"},{"line_number":1274,"context_line":"        \"\"\"Check a license against valid licenses on the array.\"\"\""},{"line_number":1275,"context_line":"        if self.valid_licenses:"},{"line_number":1276,"context_line":"            for license in self.valid_licenses:"},{"line_number":1277,"context_line":"                if license_to_check in license.get(\u0027name\u0027):"},{"line_number":1278,"context_line":"                    return True"},{"line_number":1279,"context_line":"            LOG.debug((\"\u0027%(capability)s\u0027 requires a \u0027%(license)s\u0027 \""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_7f817ec2","line":1276,"updated":"2015-12-19 00:08:40.000000000","message":"A \u0027valid_licenses\u0027 variable is being passed into this function but it seems the function always uses \u0027self.valid_licenses\u0027 and ignores the local variable.\n\n\nI think \u0027valid_licenses\u0027 should be used instead of \u0027self.valid_licenses\u0027, or maybe just remove the \u0027valid_licenses\u0027 variable if the class variable will always be used.","commit_id":"3e29ab78ce3ba0be6086125046e35a3d8f9b7c4f"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"fc49915c783104ec6eb7c94c63d31c399a20d9c4","unresolved":false,"context_lines":[{"line_number":1273,"context_line":"                               license_to_check, capability):"},{"line_number":1274,"context_line":"        \"\"\"Check a license against valid licenses on the array.\"\"\""},{"line_number":1275,"context_line":"        if self.valid_licenses:"},{"line_number":1276,"context_line":"            for license in self.valid_licenses:"},{"line_number":1277,"context_line":"                if license_to_check in license.get(\u0027name\u0027):"},{"line_number":1278,"context_line":"                    return True"},{"line_number":1279,"context_line":"            LOG.debug((\"\u0027%(capability)s\u0027 requires a \u0027%(license)s\u0027 \""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a7e1126_9fb9ca7b","line":1276,"in_reply_to":"3a7e1126_7f817ec2","updated":"2015-12-19 00:19:01.000000000","message":"Done","commit_id":"3e29ab78ce3ba0be6086125046e35a3d8f9b7c4f"}]}
