)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"9506dec9e3ed6e8fc86a24dff91c30d3458b14f0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"22d69a39_4c6c99ab","updated":"2021-11-21 22:24:06.000000000","message":"recheck","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"20fcd2a3b18f89ff38142b766b1caa0d48ed47e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"75ff61ff_c0a72a3b","updated":"2021-11-22 20:39:12.000000000","message":"recheck","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"}],"ironic/conductor/utils.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6327356df4578c5e6bb8115808e91d4d10785700","unresolved":true,"context_lines":[{"line_number":479,"context_line":"        node.del_driver_internal_info(\u0027skip_current_clean_step\u0027)"},{"line_number":480,"context_line":"        # We don\u0027t need to keep the old agent URL"},{"line_number":481,"context_line":"        # as it should change upon the next cleaning attempt."},{"line_number":482,"context_line":"        node.del_driver_internal_info(\u0027agent_url\u0027, None)"},{"line_number":483,"context_line":"    # For manual cleaning, the target provision state is MANAGEABLE, whereas"},{"line_number":484,"context_line":"    # for automated cleaning, it is AVAILABLE."},{"line_number":485,"context_line":"    manual_clean \u003d node.target_provision_state \u003d\u003d states.MANAGEABLE"}],"source_content_type":"text/x-python","patch_set":3,"id":"a63d9e51_952bbd46","line":482,"range":{"start_line":482,"start_character":51,"end_line":482,"end_character":56},"updated":"2021-11-24 08:20:01.000000000","message":"not needed if deleting","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"9341b621e86c06628e68fe0259144f448f15a2d2","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        node.del_driver_internal_info(\u0027skip_current_clean_step\u0027)"},{"line_number":480,"context_line":"        # We don\u0027t need to keep the old agent URL"},{"line_number":481,"context_line":"        # as it should change upon the next cleaning attempt."},{"line_number":482,"context_line":"        node.del_driver_internal_info(\u0027agent_url\u0027, None)"},{"line_number":483,"context_line":"    # For manual cleaning, the target provision state is MANAGEABLE, whereas"},{"line_number":484,"context_line":"    # for automated cleaning, it is AVAILABLE."},{"line_number":485,"context_line":"    manual_clean \u003d node.target_provision_state \u003d\u003d states.MANAGEABLE"}],"source_content_type":"text/x-python","patch_set":3,"id":"dc225dfd_74c32a06","line":482,"range":{"start_line":482,"start_character":51,"end_line":482,"end_character":56},"in_reply_to":"a63d9e51_952bbd46","updated":"2021-12-03 01:50:17.000000000","message":"Done","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"}],"ironic/drivers/modules/ibmc/raid.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"e84de26f9b38384d0eacc8d75876633f797a10c3","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                  \u0027target\u0027: raid_config})"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # cache current raid config to node\u0027s driver_internal_info"},{"line_number":168,"context_line":"        node.driver_internal_info[\u0027raid_config\u0027] \u003d raid_config"},{"line_number":169,"context_line":"        node.save()"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # delete exist volumes if necessary"}],"source_content_type":"text/x-python","patch_set":1,"id":"b4e6dec7_62e35103","side":"PARENT","line":168,"updated":"2020-12-01 02:12:56.000000000","message":"Here is an example of this not necessarily doing what is intended because node.driver_internal_info is not being set","commit_id":"a08da8551a66815bedef7c6444fde5f9082a6aea"}],"ironic/objects/node.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6327356df4578c5e6bb8115808e91d4d10785700","unresolved":true,"context_lines":[{"line_number":686,"context_line":"        self._convert_network_data_field(target_version,"},{"line_number":687,"context_line":"                                         remove_unavailable_fields)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def set_driver_internal_info(self, key, value):"},{"line_number":690,"context_line":"        \"\"\"Set a `driver_internal_info` value."},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"        Setting a `driver_internal_info` dict value via this method"}],"source_content_type":"text/x-python","patch_set":3,"id":"e827b3e7_346113ff","line":689,"updated":"2021-11-24 08:20:01.000000000","message":"what if we were to accept a list of key,values ?\nor convert this to private method and make the public one accept it","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"f4344c2c453b0b3a99c12bc487eacf994826d55d","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        self._convert_network_data_field(target_version,"},{"line_number":687,"context_line":"                                         remove_unavailable_fields)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def set_driver_internal_info(self, key, value):"},{"line_number":690,"context_line":"        \"\"\"Set a `driver_internal_info` value."},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"        Setting a `driver_internal_info` dict value via this method"}],"source_content_type":"text/x-python","patch_set":3,"id":"f7240c35_e7a6d8a4","line":689,"in_reply_to":"77dce317_06351756","updated":"2021-12-03 10:12:54.000000000","message":"Ack","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"9341b621e86c06628e68fe0259144f448f15a2d2","unresolved":true,"context_lines":[{"line_number":686,"context_line":"        self._convert_network_data_field(target_version,"},{"line_number":687,"context_line":"                                         remove_unavailable_fields)"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def set_driver_internal_info(self, key, value):"},{"line_number":690,"context_line":"        \"\"\"Set a `driver_internal_info` value."},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"        Setting a `driver_internal_info` dict value via this method"}],"source_content_type":"text/x-python","patch_set":3,"id":"77dce317_06351756","line":689,"in_reply_to":"e827b3e7_346113ff","updated":"2021-12-03 01:50:17.000000000","message":"I was thinking a later enhancement could be to do the following:\n\n    def set_driver_internal_info(self, key, value, *args):\n\nwhere args is a subsequent sequence of key, value. I held off on doing that now to make it easier to review that each conversion to set_driver_internal_info is correct.","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"6327356df4578c5e6bb8115808e91d4d10785700","unresolved":true,"context_lines":[{"line_number":698,"context_line":"        self.driver_internal_info[key] \u003d value"},{"line_number":699,"context_line":"        self._changed_fields.add(\u0027driver_internal_info\u0027)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def del_driver_internal_info(self, key, default_value\u003dNone):"},{"line_number":702,"context_line":"        \"\"\"Pop a value from the driver_internal_info."},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"        Removing a `driver_internal_info` dict value via this method"}],"source_content_type":"text/x-python","patch_set":3,"id":"37f90afe_1353047f","line":701,"updated":"2021-11-24 08:20:01.000000000","message":"similar here?","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"9341b621e86c06628e68fe0259144f448f15a2d2","unresolved":true,"context_lines":[{"line_number":698,"context_line":"        self.driver_internal_info[key] \u003d value"},{"line_number":699,"context_line":"        self._changed_fields.add(\u0027driver_internal_info\u0027)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def del_driver_internal_info(self, key, default_value\u003dNone):"},{"line_number":702,"context_line":"        \"\"\"Pop a value from the driver_internal_info."},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"        Removing a `driver_internal_info` dict value via this method"}],"source_content_type":"text/x-python","patch_set":3,"id":"db8863f7_87305b0b","line":701,"in_reply_to":"37f90afe_1353047f","updated":"2021-12-03 01:50:17.000000000","message":"How about key can optionally be a list, and if it is then default_value is ignored and nothing is returned? Again this can be a future change with existing uses being updated in the same change.","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"f4344c2c453b0b3a99c12bc487eacf994826d55d","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        self.driver_internal_info[key] \u003d value"},{"line_number":699,"context_line":"        self._changed_fields.add(\u0027driver_internal_info\u0027)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def del_driver_internal_info(self, key, default_value\u003dNone):"},{"line_number":702,"context_line":"        \"\"\"Pop a value from the driver_internal_info."},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"        Removing a `driver_internal_info` dict value via this method"}],"source_content_type":"text/x-python","patch_set":3,"id":"76197c89_ab119af3","line":701,"in_reply_to":"db8863f7_87305b0b","updated":"2021-12-03 10:12:54.000000000","message":"Ack","commit_id":"eba9568e66f9239f01e2ccaf0f057419251ab4fe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"dc4912cdb7fa9e0807a0c83ef0a1fea6a024d750","unresolved":false,"context_lines":[{"line_number":692,"context_line":"        self._convert_network_data_field(target_version,"},{"line_number":693,"context_line":"                                         remove_unavailable_fields)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"    def set_driver_internal_info(self, key, value):"},{"line_number":696,"context_line":"        \"\"\"Set a `driver_internal_info` value."},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        Setting a `driver_internal_info` dict value via this method"}],"source_content_type":"text/x-python","patch_set":4,"id":"23d7447f_cad40173","line":695,"updated":"2021-12-07 18:51:07.000000000","message":"I wonder if it\u0027s going to be easier to use key\u003dvalue (e.g. **kwargs) here.","commit_id":"d5eb6ee567befb36b2c353d002cbe25c83365e2a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"dc4912cdb7fa9e0807a0c83ef0a1fea6a024d750","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        self.driver_internal_info[key] \u003d value"},{"line_number":705,"context_line":"        self._changed_fields.add(\u0027driver_internal_info\u0027)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def del_driver_internal_info(self, key, default_value\u003dNone):"},{"line_number":708,"context_line":"        \"\"\"Pop a value from the driver_internal_info."},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"        Removing a `driver_internal_info` dict value via this method"}],"source_content_type":"text/x-python","patch_set":4,"id":"e37df139_f7f16d38","line":707,"updated":"2021-12-07 18:51:07.000000000","message":"s/del/pop/\n\nalso maybe accept several keys? seems a common case in various clean-ups.","commit_id":"d5eb6ee567befb36b2c353d002cbe25c83365e2a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"dc4912cdb7fa9e0807a0c83ef0a1fea6a024d750","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        \"\"\""},{"line_number":717,"context_line":"        if key in self.driver_internal_info:"},{"line_number":718,"context_line":"            self._changed_fields.add(\u0027driver_internal_info\u0027)"},{"line_number":719,"context_line":"            return self.driver_internal_info.pop(key, default_value)"},{"line_number":720,"context_line":"        return default_value"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"    def timestamp_driver_internal_info(self, key):"}],"source_content_type":"text/x-python","patch_set":4,"id":"02a41986_94975bd8","line":719,"updated":"2021-12-07 18:51:07.000000000","message":"nit: default_value cannot be used here because of the check on 717","commit_id":"d5eb6ee567befb36b2c353d002cbe25c83365e2a"}]}
