)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"070c682b6b4fe65adbc3313b932baa5a385283af","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"add snmp power action delay"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a new snmp configuration value got power_action_delay."},{"line_number":10,"context_line":"It is a pause before power on and again after power off."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"some of PDU equipment fails to perform correctly if commands are sent to quickly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"a3975b0d_d59c3c71","line":9,"updated":"2021-09-17 22:36:50.000000000","message":"s/got/for/","commit_id":"06d531ba01adc2bb042a9f14cb2db3500ac17356"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d41c12e02536b6416be2dc2869e0d6fb1d1b64a0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"It is a pause before power on and again after power off."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"some of PDU equipment fails to perform correctly if commands are sent to quickly."},{"line_number":13,"context_line":"This patch add a configurable delay to correct that behavior."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I433af25f03e5baf96c0868a28b99be290adca5eb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e0bf96b7_c550128f","line":13,"updated":"2021-09-21 14:30:32.000000000","message":"This feels similarly to what we had with IPMI, and I wonder if the solution should be the same: to enqueue all commands and execute them with a delay.\n\nOtherwise you\u0027re assuming a specific order in which power off and on are called.","commit_id":"06d531ba01adc2bb042a9f14cb2db3500ac17356"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bd826e52a92a5176d451f777a8955574e4bdcfc0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"It is a pause before power on and again after power off."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"some of PDU equipment fails to perform correctly if commands are sent to quickly."},{"line_number":13,"context_line":"This patch add a configurable delay to correct that behavior."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I433af25f03e5baf96c0868a28b99be290adca5eb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"838b6139_b777676a","line":13,"in_reply_to":"e0bf96b7_c550128f","updated":"2021-09-24 13:35:07.000000000","message":"The code for IPMI doesn\u0027t always work if a new task triggers it. And given that power on/off are the only actions, I feel like maybe we should just go with the simplest path Chris has proposed.\n\nPerhaps a bigger question, which will push me in the direction of what Dmitry suggests. Is it just the command for the port which is failing, or is it the commands in general for an entire pdu power strip?","commit_id":"06d531ba01adc2bb042a9f14cb2db3500ac17356"}],"ironic/conf/snmp.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":"8224250691a6957d140eb3a9d2fdd4e94d65f599","unresolved":true,"context_lines":[{"line_number":34,"context_line":"               default\u003d0,"},{"line_number":35,"context_line":"               min\u003d0,"},{"line_number":36,"context_line":"               help\u003d_(\u0027Time (in seconds) to sleep before power on and \u0027"},{"line_number":37,"context_line":"                      \u0027after powering off.\u0027)),"},{"line_number":38,"context_line":"    cfg.FloatOpt(\u0027udp_transport_timeout\u0027,"},{"line_number":39,"context_line":"                 default\u003d1.0,"},{"line_number":40,"context_line":"                 min\u003d0.0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1b54ba6e_3ffc84b0","line":37,"range":{"start_line":37,"start_character":41,"end_line":37,"end_character":46},"updated":"2021-10-06 18:06:23.000000000","message":"I would add \"Which may be needed with some PDUs as they may not honor toggling a specific power port in rapid succession without a delay. This option may be useful if the attached physical machine has a substantial power supply to hold it over in the event of a brownout.\"","commit_id":"06d531ba01adc2bb042a9f14cb2db3500ac17356"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"422bed55e11bb266a26c6397610b2138ad80d697","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               default\u003d0,"},{"line_number":35,"context_line":"               min\u003d0,"},{"line_number":36,"context_line":"               help\u003d_(\u0027Time (in seconds) to sleep before power on and \u0027"},{"line_number":37,"context_line":"                      \u0027after powering off.\u0027)),"},{"line_number":38,"context_line":"    cfg.FloatOpt(\u0027udp_transport_timeout\u0027,"},{"line_number":39,"context_line":"                 default\u003d1.0,"},{"line_number":40,"context_line":"                 min\u003d0.0,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e11429c6_506bd1fd","line":37,"range":{"start_line":37,"start_character":41,"end_line":37,"end_character":46},"in_reply_to":"1b54ba6e_3ffc84b0","updated":"2021-10-06 20:35:52.000000000","message":"done. will be in next revision.","commit_id":"06d531ba01adc2bb042a9f14cb2db3500ac17356"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54fea99cd7e6fe6e31788ab3258f167d1fdc2482","unresolved":true,"context_lines":[{"line_number":39,"context_line":"                      \u0027port in rapid succession without a delay. This option \u0027"},{"line_number":40,"context_line":"                      \u0027may be useful if the attached physical machine has a \u0027"},{"line_number":41,"context_line":"                      \u0027substantial power supply to hold it over in the event \u0027"},{"line_number":42,"context_line":"                      \u0027of a brownout.\u0027)),"},{"line_number":43,"context_line":"    cfg.FloatOpt(\u0027udp_transport_timeout\u0027,"},{"line_number":44,"context_line":"                 default\u003d1.0,"},{"line_number":45,"context_line":"                 min\u003d0.0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dce4d28f_86caea56","line":42,"updated":"2021-10-06 21:22:20.000000000","message":"a sign geeks understanding rectifiers and capacitors work on this project. :)","commit_id":"ea290f5465fb0cd813ec58ae46e3cc8485329af1"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"5d1f872f8fd2721c2c9cab3b0fdfa94ccb4f955b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                      \u0027port in rapid succession without a delay. This option \u0027"},{"line_number":40,"context_line":"                      \u0027may be useful if the attached physical machine has a \u0027"},{"line_number":41,"context_line":"                      \u0027substantial power supply to hold it over in the event \u0027"},{"line_number":42,"context_line":"                      \u0027of a brownout.\u0027)),"},{"line_number":43,"context_line":"    cfg.FloatOpt(\u0027udp_transport_timeout\u0027,"},{"line_number":44,"context_line":"                 default\u003d1.0,"},{"line_number":45,"context_line":"                 min\u003d0.0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3573174d_9775329b","line":42,"in_reply_to":"dce4d28f_86caea56","updated":"2021-10-06 22:05:58.000000000","message":"Done","commit_id":"ea290f5465fb0cd813ec58ae46e3cc8485329af1"}],"ironic/drivers/modules/snmp.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":"8224250691a6957d140eb3a9d2fdd4e94d65f599","unresolved":true,"context_lines":[{"line_number":511,"context_line":"        :raises: SNMPFailure if an SNMP request fails."},{"line_number":512,"context_line":"        :returns: power state. One of :class:`ironic.common.states`."},{"line_number":513,"context_line":"        \"\"\""},{"line_number":514,"context_line":"        time.sleep(CONF.snmp.power_action_delay)"},{"line_number":515,"context_line":"        self._snmp_power_on()"},{"line_number":516,"context_line":"        return self._snmp_wait_for_state(states.POWER_ON)"},{"line_number":517,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a7054f76_0a8444bd","line":514,"updated":"2021-10-06 18:06:23.000000000","message":"Same as the comment for line 525","commit_id":"06d531ba01adc2bb042a9f14cb2db3500ac17356"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"422bed55e11bb266a26c6397610b2138ad80d697","unresolved":false,"context_lines":[{"line_number":511,"context_line":"        :raises: SNMPFailure if an SNMP request fails."},{"line_number":512,"context_line":"        :returns: power state. One of :class:`ironic.common.states`."},{"line_number":513,"context_line":"        \"\"\""},{"line_number":514,"context_line":"        time.sleep(CONF.snmp.power_action_delay)"},{"line_number":515,"context_line":"        self._snmp_power_on()"},{"line_number":516,"context_line":"        return self._snmp_wait_for_state(states.POWER_ON)"},{"line_number":517,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"0e6e7620_7de30960","line":514,"in_reply_to":"a7054f76_0a8444bd","updated":"2021-10-06 20:35:52.000000000","message":"Done","commit_id":"06d531ba01adc2bb042a9f14cb2db3500ac17356"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8224250691a6957d140eb3a9d2fdd4e94d65f599","unresolved":true,"context_lines":[{"line_number":522,"context_line":"        :returns: power state. One of :class:`ironic.common.states`."},{"line_number":523,"context_line":"        \"\"\""},{"line_number":524,"context_line":"        self._snmp_power_off()"},{"line_number":525,"context_line":"        time.sleep(CONF.snmp.power_action_delay)"},{"line_number":526,"context_line":"        return self._snmp_wait_for_state(states.POWER_OFF)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def power_reset(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"0224ec36_002761eb","line":525,"updated":"2021-10-06 18:06:23.000000000","message":"For unit testing, just add a test to validate that time.sleep is called with an overridden setting value. Likely could just bolt this on to two existing tests.","commit_id":"06d531ba01adc2bb042a9f14cb2db3500ac17356"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"422bed55e11bb266a26c6397610b2138ad80d697","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        :returns: power state. One of :class:`ironic.common.states`."},{"line_number":523,"context_line":"        \"\"\""},{"line_number":524,"context_line":"        self._snmp_power_off()"},{"line_number":525,"context_line":"        time.sleep(CONF.snmp.power_action_delay)"},{"line_number":526,"context_line":"        return self._snmp_wait_for_state(states.POWER_OFF)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def power_reset(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"b67a9192_7c354574","line":525,"in_reply_to":"0224ec36_002761eb","updated":"2021-10-06 20:35:52.000000000","message":"Done","commit_id":"06d531ba01adc2bb042a9f14cb2db3500ac17356"}],"ironic/tests/unit/drivers/modules/test_snmp.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":"2ed0b2ab475c2612e82d427c71c29913650b3baa","unresolved":true,"context_lines":[{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027, autospec\u003dTrue)"},{"line_number":742,"context_line":"    def test_power_off(self, mock_get_client):"},{"line_number":743,"context_line":"        # Ensure the device is powered off correctly"},{"line_number":744,"context_line":"        mock_client \u003d mock_get_client.return_value"},{"line_number":745,"context_line":"        driver \u003d snmp._get_driver(self.node)"},{"line_number":746,"context_line":"        mock_client.get.return_value \u003d driver.value_power_off"}],"source_content_type":"text/x-python","patch_set":2,"id":"666deca5_11ea291f","line":743,"updated":"2021-10-06 19:26:27.000000000","message":"use  self.set_config(setting\u003dvalue, group\u003d\u0027groupname\u0027)","commit_id":"5c630975b8e1bae155fa3fcd10b31cd1c116c049"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"422bed55e11bb266a26c6397610b2138ad80d697","unresolved":false,"context_lines":[{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027, autospec\u003dTrue)"},{"line_number":742,"context_line":"    def test_power_off(self, mock_get_client):"},{"line_number":743,"context_line":"        # Ensure the device is powered off correctly"},{"line_number":744,"context_line":"        mock_client \u003d mock_get_client.return_value"},{"line_number":745,"context_line":"        driver \u003d snmp._get_driver(self.node)"},{"line_number":746,"context_line":"        mock_client.get.return_value \u003d driver.value_power_off"}],"source_content_type":"text/x-python","patch_set":2,"id":"b523f885_53dfced6","line":743,"in_reply_to":"666deca5_11ea291f","updated":"2021-10-06 20:35:52.000000000","message":"Done","commit_id":"5c630975b8e1bae155fa3fcd10b31cd1c116c049"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2ed0b2ab475c2612e82d427c71c29913650b3baa","unresolved":true,"context_lines":[{"line_number":745,"context_line":"        driver \u003d snmp._get_driver(self.node)"},{"line_number":746,"context_line":"        mock_client.get.return_value \u003d driver.value_power_off"},{"line_number":747,"context_line":"        pstate \u003d driver.power_off()"},{"line_number":748,"context_line":"        mock_sleep.assert_has_calls()"},{"line_number":749,"context_line":"        mock_client.set.assert_called_once_with(driver._snmp_oid(),"},{"line_number":750,"context_line":"                                                driver.value_power_off)"},{"line_number":751,"context_line":"        mock_client.get.assert_called_once_with(driver._snmp_oid())"}],"source_content_type":"text/x-python","patch_set":2,"id":"69f901d9_47658497","line":748,"range":{"start_line":748,"start_character":0,"end_line":748,"end_character":37},"updated":"2021-10-06 19:26:27.000000000","message":"and then use assert_called_once_with(value)\n\nThe whole idea instaed of just ensuring sleep gets called, ensure that the setting also controls it\u0027s value.","commit_id":"5c630975b8e1bae155fa3fcd10b31cd1c116c049"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"422bed55e11bb266a26c6397610b2138ad80d697","unresolved":false,"context_lines":[{"line_number":745,"context_line":"        driver \u003d snmp._get_driver(self.node)"},{"line_number":746,"context_line":"        mock_client.get.return_value \u003d driver.value_power_off"},{"line_number":747,"context_line":"        pstate \u003d driver.power_off()"},{"line_number":748,"context_line":"        mock_sleep.assert_has_calls()"},{"line_number":749,"context_line":"        mock_client.set.assert_called_once_with(driver._snmp_oid(),"},{"line_number":750,"context_line":"                                                driver.value_power_off)"},{"line_number":751,"context_line":"        mock_client.get.assert_called_once_with(driver._snmp_oid())"}],"source_content_type":"text/x-python","patch_set":2,"id":"da296fd3_676dad1a","line":748,"range":{"start_line":748,"start_character":0,"end_line":748,"end_character":37},"in_reply_to":"69f901d9_47658497","updated":"2021-10-06 20:35:52.000000000","message":"Done","commit_id":"5c630975b8e1bae155fa3fcd10b31cd1c116c049"}],"releasenotes/notes/snmp_add_power_action_delay-eba6c3a9cbd6ada3.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54fea99cd7e6fe6e31788ab3258f167d1fdc2482","unresolved":true,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Add new SNMP configuration option: power_action_delay"},{"line_number":4,"context_line":"    This option will add a delay in seconds before a snmp power on and after"},{"line_number":5,"context_line":"    power off. Which may be needed with some PDUs as they may not honor "},{"line_number":6,"context_line":"    toggling a specific power port in rapid succession without a delay."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"c7db221a_77222512","line":3,"range":{"start_line":3,"start_character":38,"end_line":3,"end_character":57},"updated":"2021-10-06 21:22:20.000000000","message":"config options are formatted as ``[group]option_name``","commit_id":"ea290f5465fb0cd813ec58ae46e3cc8485329af1"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"e1edda70d5aa5945372c379037d507f9edbdb79c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Add new SNMP configuration option: power_action_delay"},{"line_number":4,"context_line":"    This option will add a delay in seconds before a snmp power on and after"},{"line_number":5,"context_line":"    power off. Which may be needed with some PDUs as they may not honor "},{"line_number":6,"context_line":"    toggling a specific power port in rapid succession without a delay."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"282ba88e_a2cf40af","line":3,"range":{"start_line":3,"start_character":38,"end_line":3,"end_character":57},"in_reply_to":"c7db221a_77222512","updated":"2021-10-06 21:40:56.000000000","message":"Done","commit_id":"ea290f5465fb0cd813ec58ae46e3cc8485329af1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54fea99cd7e6fe6e31788ab3258f167d1fdc2482","unresolved":true,"context_lines":[{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Add new SNMP configuration option: power_action_delay"},{"line_number":4,"context_line":"    This option will add a delay in seconds before a snmp power on and after"},{"line_number":5,"context_line":"    power off. Which may be needed with some PDUs as they may not honor "},{"line_number":6,"context_line":"    toggling a specific power port in rapid succession without a delay."},{"line_number":7,"context_line":"    This option may be useful if the attached physical machine has a"},{"line_number":8,"context_line":"    substantial power supply to hold it over in the event of a brownout."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"af960709_ee1a78ad","line":5,"range":{"start_line":5,"start_character":69,"end_line":5,"end_character":72},"updated":"2021-10-06 21:22:20.000000000","message":"nit, whitespace.","commit_id":"ea290f5465fb0cd813ec58ae46e3cc8485329af1"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"e1edda70d5aa5945372c379037d507f9edbdb79c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Add new SNMP configuration option: power_action_delay"},{"line_number":4,"context_line":"    This option will add a delay in seconds before a snmp power on and after"},{"line_number":5,"context_line":"    power off. Which may be needed with some PDUs as they may not honor "},{"line_number":6,"context_line":"    toggling a specific power port in rapid succession without a delay."},{"line_number":7,"context_line":"    This option may be useful if the attached physical machine has a"},{"line_number":8,"context_line":"    substantial power supply to hold it over in the event of a brownout."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"39adcd54_1fb7b6eb","line":5,"range":{"start_line":5,"start_character":69,"end_line":5,"end_character":72},"in_reply_to":"af960709_ee1a78ad","updated":"2021-10-06 21:40:56.000000000","message":"Done","commit_id":"ea290f5465fb0cd813ec58ae46e3cc8485329af1"}]}
