)]}'
{"ironic/common/release_mappings.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"657857a86b1ef9aa9fda691fe4e54c2251dc8289","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        \u0027api\u0027: \u00271.44\u0027,"},{"line_number":119,"context_line":"        \u0027rpc\u0027: \u00271.45\u0027,"},{"line_number":120,"context_line":"        \u0027objects\u0027: {"},{"line_number":121,"context_line":"            \u0027Node\u0027: [\u00271.24\u0027, \u00271.25\u0027, \u00271.26\u0027, \u00271.27\u0027],"},{"line_number":122,"context_line":"            \u0027Conductor\u0027: [\u00271.2\u0027, \u00271.3\u0027],"},{"line_number":123,"context_line":"            \u0027Chassis\u0027: [\u00271.3\u0027],"},{"line_number":124,"context_line":"            \u0027Port\u0027: [\u00271.8\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_d8a69bad","line":121,"updated":"2018-07-11 16:21:02.000000000","message":"ugh. I just realized cuz we released 11.0, that this should only be [\u00271.27\u0027, \u00271.26\u0027]","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"1708c945eb29b3d6c2bd67633225f72d737d8706","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        \u0027api\u0027: \u00271.44\u0027,"},{"line_number":119,"context_line":"        \u0027rpc\u0027: \u00271.45\u0027,"},{"line_number":120,"context_line":"        \u0027objects\u0027: {"},{"line_number":121,"context_line":"            \u0027Node\u0027: [\u00271.24\u0027, \u00271.25\u0027, \u00271.26\u0027, \u00271.27\u0027],"},{"line_number":122,"context_line":"            \u0027Conductor\u0027: [\u00271.2\u0027, \u00271.3\u0027],"},{"line_number":123,"context_line":"            \u0027Chassis\u0027: [\u00271.3\u0027],"},{"line_number":124,"context_line":"            \u0027Port\u0027: [\u00271.8\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_900a05cf","line":121,"in_reply_to":"5f7c97a3_2a571904","updated":"2018-07-13 14:57:18.000000000","message":"Done","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9ed68fdaefdb6ba01bb548bdfa2bd982e638a4ec","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        \u0027api\u0027: \u00271.44\u0027,"},{"line_number":119,"context_line":"        \u0027rpc\u0027: \u00271.45\u0027,"},{"line_number":120,"context_line":"        \u0027objects\u0027: {"},{"line_number":121,"context_line":"            \u0027Node\u0027: [\u00271.24\u0027, \u00271.25\u0027, \u00271.26\u0027, \u00271.27\u0027],"},{"line_number":122,"context_line":"            \u0027Conductor\u0027: [\u00271.2\u0027, \u00271.3\u0027],"},{"line_number":123,"context_line":"            \u0027Chassis\u0027: [\u00271.3\u0027],"},{"line_number":124,"context_line":"            \u0027Port\u0027: [\u00271.8\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_2a571904","line":121,"in_reply_to":"5f7c97a3_d8a69bad","updated":"2018-07-12 14:04:39.000000000","message":"Julia asked \"I think we need to keep the overlap in from the last cycle\u0027s release because we want to enable direct jumps from 10.1.x to 11.1.x\".\n\nFor the releases in this file, the upgrades (should) work from any release  to any newer release. The versions of objects specified per release are the versions that were \u0027created\u0027 in that release (or we just carry over the latest version from the previous version). When upgrading to a newer release, we want to upgrade to the max version of that object in that release. [So the other thing wrong with this is that \u00271.27\u0027 should be first; I want to add a unit test to check for that, because I can see how easy it is to forget, as I forgot, even though it is documented above at L44.]\n\nI took a look at the code. The object versions per release are needed for checking whether the DB is compatible for upgrading to the following release (i.e. used wrt making sure they have done an online_db_migration if that is needed). They are also needed to go from an older master version to a newer master version. If we put in overlaps, it\u0027ll mean those versions are OK in two releases. In this particular case, OK in 11.0 and (say master becomes Rocky @) 11.1. If the user doesn\u0027t do a db-online-migration and they have nodes in v1.24, it will be possible for them to upgrade to Stein. which *might* be OK (depending on the changes to the Node) but it is safer to migrate the nodes to 1.27, before upgrading to Stein.\n\nThe concept of stable releases is only used wrt our rolling upgrades in the sense of providing a name for the release instead of a version number and to do housecleaning like not supporting upgrades from older \u003cstable\u003e releases.","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"657857a86b1ef9aa9fda691fe4e54c2251dc8289","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        \u0027rpc\u0027: \u00271.45\u0027,"},{"line_number":120,"context_line":"        \u0027objects\u0027: {"},{"line_number":121,"context_line":"            \u0027Node\u0027: [\u00271.24\u0027, \u00271.25\u0027, \u00271.26\u0027, \u00271.27\u0027],"},{"line_number":122,"context_line":"            \u0027Conductor\u0027: [\u00271.2\u0027, \u00271.3\u0027],"},{"line_number":123,"context_line":"            \u0027Chassis\u0027: [\u00271.3\u0027],"},{"line_number":124,"context_line":"            \u0027Port\u0027: [\u00271.8\u0027],"},{"line_number":125,"context_line":"            \u0027Portgroup\u0027: [\u00271.4\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_58accb87","line":122,"updated":"2018-07-11 16:21:02.000000000","message":"this should only be [\u00271.3\u0027]","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"1708c945eb29b3d6c2bd67633225f72d737d8706","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        \u0027rpc\u0027: \u00271.45\u0027,"},{"line_number":120,"context_line":"        \u0027objects\u0027: {"},{"line_number":121,"context_line":"            \u0027Node\u0027: [\u00271.24\u0027, \u00271.25\u0027, \u00271.26\u0027, \u00271.27\u0027],"},{"line_number":122,"context_line":"            \u0027Conductor\u0027: [\u00271.2\u0027, \u00271.3\u0027],"},{"line_number":123,"context_line":"            \u0027Chassis\u0027: [\u00271.3\u0027],"},{"line_number":124,"context_line":"            \u0027Port\u0027: [\u00271.8\u0027],"},{"line_number":125,"context_line":"            \u0027Portgroup\u0027: [\u00271.4\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_b00dc1e8","line":122,"in_reply_to":"5f7c97a3_58accb87","updated":"2018-07-13 14:57:18.000000000","message":"Done","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"}],"ironic/common/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c741f5f82ad3ec5cfa4ca0c0b0ec7b9b3021be01","unresolved":false,"context_lines":[{"line_number":553,"context_line":"    if not isinstance(conductor_group, six.string_types):"},{"line_number":554,"context_line":"        raise exception.InvalidConductorGroup(group\u003dconductor_group)"},{"line_number":555,"context_line":"    if not re.match(r\u0027^[a-zA-Z0-9_\\-\\.]*$\u0027, conductor_group):"},{"line_number":556,"context_line":"        raise exception.InvalidConductorGroup(group\u003dconductor_group)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_5b488d2c","line":556,"updated":"2018-07-19 14:35:19.000000000","message":"check that it\u0027s less than 255 chars?","commit_id":"7929361a0b399feaa466c51c7257dcf6a5328aec"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3db5a67bd6f138364932ce4b07984c2eeed97dc5","unresolved":false,"context_lines":[{"line_number":553,"context_line":"    if not isinstance(conductor_group, six.string_types):"},{"line_number":554,"context_line":"        raise exception.InvalidConductorGroup(group\u003dconductor_group)"},{"line_number":555,"context_line":"    if not re.match(r\u0027^[a-zA-Z0-9_\\-\\.]*$\u0027, conductor_group):"},{"line_number":556,"context_line":"        raise exception.InvalidConductorGroup(group\u003dconductor_group)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_3b6cb169","line":556,"in_reply_to":"5f7c97a3_5b488d2c","updated":"2018-07-19 17:16:18.000000000","message":"+1, That is a good sanity check, although otherwise the object should just fail to save.","commit_id":"7929361a0b399feaa466c51c7257dcf6a5328aec"}],"ironic/conf/conductor.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9e828083003d9656f929c068bb026c1acacc956c","unresolved":false,"context_lines":[{"line_number":182,"context_line":"               help\u003d_(\u0027Name of the conductor group to join. Can be up to \u0027"},{"line_number":183,"context_line":"                      \u0027255 characters and is case insensitive. This \u0027"},{"line_number":184,"context_line":"                      \u0027conductor will only manage nodes with a matching \u0027"},{"line_number":185,"context_line":"                      \u0027\"conductor_group\" field in the database.\u0027)),"},{"line_number":186,"context_line":"]"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_0d994a1c","line":185,"range":{"start_line":185,"start_character":47,"end_line":185,"end_character":64},"updated":"2018-07-10 20:40:33.000000000","message":"s/in the database/if set on the baremetal node/\n\nSince users and operators should be interacting with command line, not the db directly.","commit_id":"c6283f3e4b91c53ad7a6a13bb15f0b26d0b34afa"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"657857a86b1ef9aa9fda691fe4e54c2251dc8289","unresolved":false,"context_lines":[{"line_number":182,"context_line":"               help\u003d_(\u0027Name of the conductor group to join. Can be up to \u0027"},{"line_number":183,"context_line":"                      \u0027255 characters and is case insensitive. This \u0027"},{"line_number":184,"context_line":"                      \u0027conductor will only manage nodes with a matching \u0027"},{"line_number":185,"context_line":"                      \u0027\"conductor_group\" field set on the node.\u0027)),"},{"line_number":186,"context_line":"]"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_78aae784","line":185,"updated":"2018-07-11 16:21:02.000000000","message":"If we are thinking of landing the patches of this feature in quick succession, this is fine. If we think it\u0027ll take awhile, we need to put some sort of \u0027this has no effect yet\u0027...","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"1708c945eb29b3d6c2bd67633225f72d737d8706","unresolved":false,"context_lines":[{"line_number":182,"context_line":"               help\u003d_(\u0027Name of the conductor group to join. Can be up to \u0027"},{"line_number":183,"context_line":"                      \u0027255 characters and is case insensitive. This \u0027"},{"line_number":184,"context_line":"                      \u0027conductor will only manage nodes with a matching \u0027"},{"line_number":185,"context_line":"                      \u0027\"conductor_group\" field set on the node.\u0027)),"},{"line_number":186,"context_line":"]"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_70ef29fa","line":185,"in_reply_to":"5f7c97a3_33b791fb","updated":"2018-07-13 14:57:18.000000000","message":"Ditto, let\u0027s leave it for now.","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a25058a5891f13e118c716a936ca56b218e40cb","unresolved":false,"context_lines":[{"line_number":182,"context_line":"               help\u003d_(\u0027Name of the conductor group to join. Can be up to \u0027"},{"line_number":183,"context_line":"                      \u0027255 characters and is case insensitive. This \u0027"},{"line_number":184,"context_line":"                      \u0027conductor will only manage nodes with a matching \u0027"},{"line_number":185,"context_line":"                      \u0027\"conductor_group\" field set on the node.\u0027)),"},{"line_number":186,"context_line":"]"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_33b791fb","line":185,"in_reply_to":"5f7c97a3_78aae784","updated":"2018-07-12 19:10:35.000000000","message":"I was thinking rapid succession, if not we can always amend it.","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"}],"ironic/objects/node.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9e828083003d9656f929c068bb026c1acacc956c","unresolved":false,"context_lines":[{"line_number":547,"context_line":"            elif self.bios_interface is not None:"},{"line_number":548,"context_line":"                # DB: set unavailable field to the default of None."},{"line_number":549,"context_line":"                self.bios_interface \u003d None"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        self._convert_fault_field(target_version, remove_unavailable_fields)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_ed064e21","line":550,"updated":"2018-07-10 20:40:33.000000000","message":"With the versioned objects, I\u0027m fairly sure we need to go ahead and strip the field\u0027s contents in case of a rolling upgrade. Even though we roll with a default, value, I suspect it needs to be asserted here in case something is kicked across rpc.\n\nhttps://review.openstack.org/#/c/579967/3/ironic/objects/node.py is a clean example of us doing this for deploy_step","commit_id":"c6283f3e4b91c53ad7a6a13bb15f0b26d0b34afa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"1708c945eb29b3d6c2bd67633225f72d737d8706","unresolved":false,"context_lines":[{"line_number":547,"context_line":"            elif self.bios_interface is not None:"},{"line_number":548,"context_line":"                # DB: set unavailable field to the default of None."},{"line_number":549,"context_line":"                self.bios_interface \u003d None"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        self._convert_fault_field(target_version, remove_unavailable_fields)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_f2ea989e","line":550,"in_reply_to":"5f7c97a3_ed064e21","updated":"2018-07-13 14:57:18.000000000","message":"Done","commit_id":"c6283f3e4b91c53ad7a6a13bb15f0b26d0b34afa"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"657857a86b1ef9aa9fda691fe4e54c2251dc8289","unresolved":false,"context_lines":[{"line_number":504,"context_line":"    def _convert_conductor_group_field(self, target_version,"},{"line_number":505,"context_line":"                                       remove_unavailable_fields\u003dTrue):"},{"line_number":506,"context_line":"        # NOTE(jroll): The default conductor_group is \"\", not None"},{"line_number":507,"context_line":"        step_is_set \u003d self.obj_attr_is_set(\u0027conductor_group\u0027)"},{"line_number":508,"context_line":"        if target_version \u003e\u003d (1, 27):"},{"line_number":509,"context_line":"            if not step_is_set:"},{"line_number":510,"context_line":"                self.conductor_group \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_9873431d","line":507,"updated":"2018-07-11 16:21:02.000000000","message":"not sure if you want \u0027step_is_set\u0027 or maybe just \u0027is_set\u0027 ?","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"1708c945eb29b3d6c2bd67633225f72d737d8706","unresolved":false,"context_lines":[{"line_number":504,"context_line":"    def _convert_conductor_group_field(self, target_version,"},{"line_number":505,"context_line":"                                       remove_unavailable_fields\u003dTrue):"},{"line_number":506,"context_line":"        # NOTE(jroll): The default conductor_group is \"\", not None"},{"line_number":507,"context_line":"        step_is_set \u003d self.obj_attr_is_set(\u0027conductor_group\u0027)"},{"line_number":508,"context_line":"        if target_version \u003e\u003d (1, 27):"},{"line_number":509,"context_line":"            if not step_is_set:"},{"line_number":510,"context_line":"                self.conductor_group \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_9023e558","line":507,"in_reply_to":"5f7c97a3_9873431d","updated":"2018-07-13 14:57:18.000000000","message":"Oops, copy pasta","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"657857a86b1ef9aa9fda691fe4e54c2251dc8289","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        \u0027updated_at\u0027: (\u0027node\u0027, \u0027updated_at\u0027),"},{"line_number":642,"context_line":"        \u0027uuid\u0027: (\u0027node\u0027, \u0027uuid\u0027)"},{"line_number":643,"context_line":"    }"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    # Version 1.0: Initial version, based off of Node version 1.18."},{"line_number":646,"context_line":"    # Version 1.1: Type of network_interface changed to just nullable string"},{"line_number":647,"context_line":"    #              similar to version 1.20 of Node."}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_1850935f","line":644,"updated":"2018-07-11 16:21:02.000000000","message":"Don\u0027t forget to update the node notification payloads, when conductor_group is exposed in the API","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"1708c945eb29b3d6c2bd67633225f72d737d8706","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        \u0027updated_at\u0027: (\u0027node\u0027, \u0027updated_at\u0027),"},{"line_number":642,"context_line":"        \u0027uuid\u0027: (\u0027node\u0027, \u0027uuid\u0027)"},{"line_number":643,"context_line":"    }"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    # Version 1.0: Initial version, based off of Node version 1.18."},{"line_number":646,"context_line":"    # Version 1.1: Type of network_interface changed to just nullable string"},{"line_number":647,"context_line":"    #              similar to version 1.20 of Node."}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_b0db814c","line":644,"in_reply_to":"5f7c97a3_1850935f","updated":"2018-07-13 14:57:18.000000000","message":"Yep, later patch.","commit_id":"c72ef8134ddc619fc60c091e71c952c7cc803f0b"}]}
