)]}'
{"devstack/lib/ironic":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"93d9e1c1f159d4a16ff57a269e0dd05b9a64cec9","unresolved":false,"context_lines":[{"line_number":1391,"context_line":"    # NOTE(vsaienko) with multinode each conductor should have its own host."},{"line_number":1392,"context_line":"    iniset $IRONIC_CONF_FILE DEFAULT host $LOCAL_HOSTNAME"},{"line_number":1393,"context_line":"    # NOTE(TheJulia) Set a minimum amount of memory that is more in-line with"},{"line_number":1394,"context_line":"    # OpenStack CI and the images deployed. "},{"line_number":1395,"context_line":"    iniset $IRONIC_CONF_FILE DEFAULT memory_minimum 256"},{"line_number":1396,"context_line":"    # Retrieve deployment logs"},{"line_number":1397,"context_line":"    iniset $IRONIC_CONF_FILE agent deploy_logs_collect $IRONIC_DEPLOY_LOGS_COLLECT"}],"source_content_type":"application/x-shellscript","patch_set":12,"id":"9f560f44_d74f3c32","line":1394,"range":{"start_line":1394,"start_character":43,"end_line":1394,"end_character":44},"updated":"2020-08-11 08:56:52.000000000","message":"nit: blank space","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a6d38b20630c47d636c61b1e5277c1801f82d9f4","unresolved":false,"context_lines":[{"line_number":1391,"context_line":"    # NOTE(vsaienko) with multinode each conductor should have its own host."},{"line_number":1392,"context_line":"    iniset $IRONIC_CONF_FILE DEFAULT host $LOCAL_HOSTNAME"},{"line_number":1393,"context_line":"    # NOTE(TheJulia) Set a minimum amount of memory that is more in-line with"},{"line_number":1394,"context_line":"    # OpenStack CI and the images deployed. "},{"line_number":1395,"context_line":"    iniset $IRONIC_CONF_FILE DEFAULT memory_minimum 256"},{"line_number":1396,"context_line":"    # Retrieve deployment logs"},{"line_number":1397,"context_line":"    iniset $IRONIC_CONF_FILE agent deploy_logs_collect $IRONIC_DEPLOY_LOGS_COLLECT"}],"source_content_type":"application/x-shellscript","patch_set":12,"id":"9f560f44_7abfa8a9","line":1394,"range":{"start_line":1394,"start_character":43,"end_line":1394,"end_character":44},"in_reply_to":"9f560f44_d74f3c32","updated":"2020-08-20 21:23:43.000000000","message":"Done","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"}],"doc/source/admin/troubleshooting.rst":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c3525a3df6b75bd8ee968987c7d9f80aeaf1dfb9","unresolved":false,"context_lines":[{"line_number":712,"context_line":"    in your ironic.conf file. The default should be considered a \"default"},{"line_number":713,"context_line":"    of last resort\" and you may need to reserve additional memory. You may"},{"line_number":714,"context_line":"    also wish to adjust the ``[DEFAULT]minimum_memory_wait_retries`` and"},{"line_number":715,"context_line":"    ``[DEFAULT]minimum_memory_wait_time`` parameters."}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f560f44_1f66abbc","line":715,"updated":"2020-09-16 23:15:18.000000000","message":"Is it worth suggesting to use raw images as a workaround?","commit_id":"36455914ed60e9bb0a58f5f445687712a187fff3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d293cf2071cb7fc9203772b5b73067152c3da800","unresolved":false,"context_lines":[{"line_number":712,"context_line":"    in your ironic.conf file. The default should be considered a \"default"},{"line_number":713,"context_line":"    of last resort\" and you may need to reserve additional memory. You may"},{"line_number":714,"context_line":"    also wish to adjust the ``[DEFAULT]minimum_memory_wait_retries`` and"},{"line_number":715,"context_line":"    ``[DEFAULT]minimum_memory_wait_time`` parameters."}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f560f44_ba05e416","line":715,"in_reply_to":"9f560f44_1f66abbc","updated":"2020-09-18 19:29:35.000000000","message":"Yes!","commit_id":"36455914ed60e9bb0a58f5f445687712a187fff3"}],"ironic/common/exception.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc05caa1c44d57b8b4982c7fd17fe24d5e98a986","unresolved":false,"context_lines":[{"line_number":816,"context_line":""},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"class InsufficentMemory(IronicException):"},{"line_number":819,"context_line":"    _msg_fmt \u003d _(\"Insufficent memory resources to proceed at this time.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_5d4df96f","line":819,"updated":"2020-09-29 14:13:16.000000000","message":"Let\u0027s mention what we need and what we measured.","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"274cef764ce591c041c0ea8ac0c4c7aa6f0d9a31","unresolved":false,"context_lines":[{"line_number":816,"context_line":""},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"class InsufficentMemory(IronicException):"},{"line_number":819,"context_line":"    _msg_fmt \u003d _(\"Insufficent memory resources to proceed at this time.\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_de1f3fb6","line":819,"in_reply_to":"9f560f44_5d4df96f","updated":"2020-09-30 20:19:04.000000000","message":"Done","commit_id":"29e64436789747d10b2a99efe134c815912133c8"}],"ironic/common/images.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0b1bf5d7245a0d7c68d7a035e1211486889740be","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                      {\u0027image\u0027: image_href, \u0027format\u0027: fmt})"},{"line_number":438,"context_line":"            with fileutils.remove_path_on_error(staged):"},{"line_number":439,"context_line":"                if utils.hold_if_freemem_insufficent():"},{"line_number":440,"context_line":"                    raise exception.InsufficentMemory()"},{"line_number":441,"context_line":"                disk_utils.convert_image(path_tmp, staged, \u0027raw\u0027)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"                os.unlink(path_tmp)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_31b5d432","line":440,"updated":"2020-05-11 10:23:09.000000000","message":"ironic.common.images is a surprising place (IMO) to have this check. I\u0027d leave it on driver level.\n\nAlso raising an exception is something we should avoid as long as this feature is enabled by default.","commit_id":"4ba0c0cbc67957748edc260b771a6cee61cfa7e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"89c9fdbc246be2df39183ac1839430d50e4e4446","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                      {\u0027image\u0027: image_href, \u0027format\u0027: fmt})"},{"line_number":438,"context_line":"            with fileutils.remove_path_on_error(staged):"},{"line_number":439,"context_line":"                if utils.hold_if_freemem_insufficent():"},{"line_number":440,"context_line":"                    raise exception.InsufficentMemory()"},{"line_number":441,"context_line":"                disk_utils.convert_image(path_tmp, staged, \u0027raw\u0027)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"                os.unlink(path_tmp)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_43ff3aaa","line":440,"in_reply_to":"ff570b3c_31b5d432","updated":"2020-06-02 21:50:14.000000000","message":"so, I guess we could have the image caching code call it before invoking any image conversions. It would be more consistent that way because otherwise some other jobs may slip through or actions may continue with insufficient free memory to really ensure they are able to complete later.","commit_id":"4ba0c0cbc67957748edc260b771a6cee61cfa7e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc05caa1c44d57b8b4982c7fd17fe24d5e98a986","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            LOG.debug(\"%(image)s was %(format)s, converting to raw\","},{"line_number":451,"context_line":"                      {\u0027image\u0027: image_href, \u0027format\u0027: fmt})"},{"line_number":452,"context_line":"            with fileutils.remove_path_on_error(staged):"},{"line_number":453,"context_line":"                if utils.is_memory_insufficent():"},{"line_number":454,"context_line":"                    raise exception.InsufficentMemory()"},{"line_number":455,"context_line":"                disk_utils.convert_image(path_tmp, staged, \u0027raw\u0027)"},{"line_number":456,"context_line":"                os.unlink(path_tmp)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_9d22f1a2","line":453,"updated":"2020-09-29 14:13:16.000000000","message":"nit: move before line 449","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"274cef764ce591c041c0ea8ac0c4c7aa6f0d9a31","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            LOG.debug(\"%(image)s was %(format)s, converting to raw\","},{"line_number":451,"context_line":"                      {\u0027image\u0027: image_href, \u0027format\u0027: fmt})"},{"line_number":452,"context_line":"            with fileutils.remove_path_on_error(staged):"},{"line_number":453,"context_line":"                if utils.is_memory_insufficent():"},{"line_number":454,"context_line":"                    raise exception.InsufficentMemory()"},{"line_number":455,"context_line":"                disk_utils.convert_image(path_tmp, staged, \u0027raw\u0027)"},{"line_number":456,"context_line":"                os.unlink(path_tmp)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_3e1d9bbe","line":453,"in_reply_to":"9f560f44_9d22f1a2","updated":"2020-09-30 20:19:04.000000000","message":"Done","commit_id":"29e64436789747d10b2a99efe134c815912133c8"}],"ironic/common/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0b1bf5d7245a0d7c68d7a035e1211486889740be","unresolved":false,"context_lines":[{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    :param required_memory: The amount of memory, in MB, which the process"},{"line_number":589,"context_line":"                            requires in order to overload the system."},{"line_number":590,"context_line":"    :returns: True if the check has timed out. Otherwise None is returned."},{"line_number":591,"context_line":"    \"\"\""},{"line_number":592,"context_line":"    memory_av \u003d psutil.virtual_memory().available"},{"line_number":593,"context_line":"    # NOTE(TheJulia): The .available value is the memory that can be given"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_b1a9e4e0","line":590,"updated":"2020-05-11 10:23:09.000000000","message":"nit: probably find a better name for this function so that the return value is obvious","commit_id":"4ba0c0cbc67957748edc260b771a6cee61cfa7e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0b1bf5d7245a0d7c68d7a035e1211486889740be","unresolved":false,"context_lines":[{"line_number":609,"context_line":"                      \u0027exceeded retries.\u0027,"},{"line_number":610,"context_line":"                      log_values)"},{"line_number":611,"context_line":"            return True"},{"line_number":612,"context_line":"        LOG.error(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":613,"context_line":"                  \u0027%(required)s waiting.\u0027, log_values)"},{"line_number":614,"context_line":"        # Sleep so interpreter can switch threads."},{"line_number":615,"context_line":"        time.sleep(CONF.memory_wait_time)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_11aed0e6","line":612,"updated":"2020-05-11 10:23:09.000000000","message":"s/error/debug/ since we\u0027re still retrying","commit_id":"4ba0c0cbc67957748edc260b771a6cee61cfa7e1"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0b1bf5d7245a0d7c68d7a035e1211486889740be","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                      log_values)"},{"line_number":611,"context_line":"            return True"},{"line_number":612,"context_line":"        LOG.error(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":613,"context_line":"                  \u0027%(required)s waiting.\u0027, log_values)"},{"line_number":614,"context_line":"        # Sleep so interpreter can switch threads."},{"line_number":615,"context_line":"        time.sleep(CONF.memory_wait_time)"},{"line_number":616,"context_line":"        memory_av \u003d psutil.virtual_memory().available / 1024"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_f1aa3cd0","line":613,"updated":"2020-05-11 10:23:09.000000000","message":"nit: missing comma before waiting","commit_id":"4ba0c0cbc67957748edc260b771a6cee61cfa7e1"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"ab2eb5bbaa3d36c5e5821a9e0ac6c6a449a58e10","unresolved":false,"context_lines":[{"line_number":595,"context_line":"    # The .free value allows the process to swap its data, but given use"},{"line_number":596,"context_line":"    # case we shouldn\u0027t use the free option as it will involve more disk"},{"line_number":597,"context_line":"    # IO which is something a well behaved process seeks to avoid."},{"line_number":598,"context_line":"    memory_av \u003d memory_av / 1024"},{"line_number":599,"context_line":"    loop_count \u003d 0"},{"line_number":600,"context_line":"    while memory_av \u003c required_memory:"},{"line_number":601,"context_line":"        log_values \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_f1c94678","line":598,"range":{"start_line":598,"start_character":4,"end_line":598,"end_character":32},"updated":"2020-07-07 14:19:27.000000000","message":"I think psutil.virtual_memory().available is in bytes, so this is KB, while required_memory is in MB.","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2463da2c628d293912eee208ca757eec10bc2b6","unresolved":false,"context_lines":[{"line_number":595,"context_line":"    # The .free value allows the process to swap its data, but given use"},{"line_number":596,"context_line":"    # case we shouldn\u0027t use the free option as it will involve more disk"},{"line_number":597,"context_line":"    # IO which is something a well behaved process seeks to avoid."},{"line_number":598,"context_line":"    memory_av \u003d memory_av / 1024"},{"line_number":599,"context_line":"    loop_count \u003d 0"},{"line_number":600,"context_line":"    while memory_av \u003c required_memory:"},{"line_number":601,"context_line":"        log_values \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_ee9afdc2","line":598,"range":{"start_line":598,"start_character":4,"end_line":598,"end_character":32},"in_reply_to":"bf51134e_f1c94678","updated":"2020-07-08 13:42:29.000000000","message":"Confirmed. Good catch. I thought it was KB for some reason :(","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"ab2eb5bbaa3d36c5e5821a9e0ac6c6a449a58e10","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                      \u0027exceeded retries.\u0027,"},{"line_number":609,"context_line":"                      log_values)"},{"line_number":610,"context_line":"            return True"},{"line_number":611,"context_line":"        LOG.error(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":612,"context_line":"                  \u0027%(required)s, waiting.\u0027, log_values)"},{"line_number":613,"context_line":"        # Sleep so interpreter can switch threads."},{"line_number":614,"context_line":"        time.sleep(CONF.memory_wait_time)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_918f2a2d","line":611,"range":{"start_line":611,"start_character":8,"end_line":611,"end_character":17},"updated":"2020-07-07 14:19:27.000000000","message":"Isn\u0027t this a warning?","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2463da2c628d293912eee208ca757eec10bc2b6","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                      \u0027exceeded retries.\u0027,"},{"line_number":609,"context_line":"                      log_values)"},{"line_number":610,"context_line":"            return True"},{"line_number":611,"context_line":"        LOG.error(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":612,"context_line":"                  \u0027%(required)s, waiting.\u0027, log_values)"},{"line_number":613,"context_line":"        # Sleep so interpreter can switch threads."},{"line_number":614,"context_line":"        time.sleep(CONF.memory_wait_time)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_2ea51505","line":611,"range":{"start_line":611,"start_character":8,"end_line":611,"end_character":17},"in_reply_to":"bf51134e_918f2a2d","updated":"2020-07-08 13:42:29.000000000","message":"Done","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"570f3ab169ffdb674a138870024cc72eacc1d22d","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    return ip"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"def is_memory_insufficent(required_memory\u003dCONF.memory_minimum):"},{"line_number":578,"context_line":"    \"\"\"Checks available system memory and holds the deployment process."},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    Evaluates the current available, meaning can be allocated to a process"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_251e4b6f","line":577,"updated":"2020-07-16 14:37:57.000000000","message":"This makes it impossible to have this option as mutable. Do we have a use case for changing it? Maybe just use the CONF value directly in the function body?","commit_id":"c19b57f0db9b70ea733bf23bf4e45843264ae9cf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a6d38b20630c47d636c61b1e5277c1801f82d9f4","unresolved":false,"context_lines":[{"line_number":574,"context_line":"    return ip"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"def is_memory_insufficent(required_memory\u003dCONF.memory_minimum):"},{"line_number":578,"context_line":"    \"\"\"Checks available system memory and holds the deployment process."},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    Evaluates the current available, meaning can be allocated to a process"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_399cb2be","line":577,"in_reply_to":"bf51134e_251e4b6f","updated":"2020-08-20 21:23:43.000000000","message":"Seems reasonable. I wanted to be able to do like a factor so the caller could declare how much more, but that is not needed now.","commit_id":"c19b57f0db9b70ea733bf23bf4e45843264ae9cf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"93d9e1c1f159d4a16ff57a269e0dd05b9a64cec9","unresolved":false,"context_lines":[{"line_number":587,"context_line":"def is_memory_insufficent():"},{"line_number":588,"context_line":"    \"\"\"Checks available system memory and holds the deployment process."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    Evaluates the current available, meaning can be allocated to a process"},{"line_number":591,"context_line":"    by the kernel upon allocation request, and delays the execution until"},{"line_number":592,"context_line":"    memory has been freed, or until it has timed out."},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_7758f0f9","line":590,"range":{"start_line":590,"start_character":25,"end_line":590,"end_character":26},"updated":"2020-08-11 08:56:52.000000000","message":"nit: memory?","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a6d38b20630c47d636c61b1e5277c1801f82d9f4","unresolved":false,"context_lines":[{"line_number":587,"context_line":"def is_memory_insufficent():"},{"line_number":588,"context_line":"    \"\"\"Checks available system memory and holds the deployment process."},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    Evaluates the current available, meaning can be allocated to a process"},{"line_number":591,"context_line":"    by the kernel upon allocation request, and delays the execution until"},{"line_number":592,"context_line":"    memory has been freed, or until it has timed out."},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_3ac9b058","line":590,"range":{"start_line":590,"start_character":25,"end_line":590,"end_character":26},"in_reply_to":"9f560f44_7758f0f9","updated":"2020-08-20 21:23:43.000000000","message":"Done","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"149a7b930dd707781eb5658668d131c7bbee2a6b","unresolved":false,"context_lines":[{"line_number":599,"context_line":"                            requires in order to overload the system."},{"line_number":600,"context_line":"    :returns: True if the check has timed out. Otherwise None is returned."},{"line_number":601,"context_line":"    \"\"\""},{"line_number":602,"context_line":"    required_memory \u003d CONF.memory_minimum"},{"line_number":603,"context_line":"    memory_av \u003d psutil.virtual_memory().available"},{"line_number":604,"context_line":"    # NOTE(TheJulia): The .available value is the memory that can be given"},{"line_number":605,"context_line":"    # to a process without the process beginning to swap."}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_34ab0976","line":602,"range":{"start_line":602,"start_character":27,"end_line":602,"end_character":41},"updated":"2020-08-12 06:09:07.000000000","message":"I found the name is a bit confusing.\nnova has a similar thing, when the host memory is lower than the reservation, it will not schedule vm there.\nSo from the code I think required_memory or minimum_required_memory sounds like a better name.","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a6d38b20630c47d636c61b1e5277c1801f82d9f4","unresolved":false,"context_lines":[{"line_number":599,"context_line":"                            requires in order to overload the system."},{"line_number":600,"context_line":"    :returns: True if the check has timed out. Otherwise None is returned."},{"line_number":601,"context_line":"    \"\"\""},{"line_number":602,"context_line":"    required_memory \u003d CONF.memory_minimum"},{"line_number":603,"context_line":"    memory_av \u003d psutil.virtual_memory().available"},{"line_number":604,"context_line":"    # NOTE(TheJulia): The .available value is the memory that can be given"},{"line_number":605,"context_line":"    # to a process without the process beginning to swap."}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_5ad0e41f","line":602,"range":{"start_line":602,"start_character":27,"end_line":602,"end_character":41},"in_reply_to":"9f560f44_34ab0976","updated":"2020-08-20 21:23:43.000000000","message":"I agree, I\u0027ve kind of slipped up a few times. I\u0027ll change it!","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"93d9e1c1f159d4a16ff57a269e0dd05b9a64cec9","unresolved":false,"context_lines":[{"line_number":600,"context_line":"    :returns: True if the check has timed out. Otherwise None is returned."},{"line_number":601,"context_line":"    \"\"\""},{"line_number":602,"context_line":"    required_memory \u003d CONF.memory_minimum"},{"line_number":603,"context_line":"    memory_av \u003d psutil.virtual_memory().available"},{"line_number":604,"context_line":"    # NOTE(TheJulia): The .available value is the memory that can be given"},{"line_number":605,"context_line":"    # to a process without the process beginning to swap."},{"line_number":606,"context_line":"    # The .free value allows the process to swap its data, but given use"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_b771e87a","line":603,"updated":"2020-08-11 08:56:52.000000000","message":"nit: probably worth wrapping this in a try/except","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a6d38b20630c47d636c61b1e5277c1801f82d9f4","unresolved":false,"context_lines":[{"line_number":600,"context_line":"    :returns: True if the check has timed out. Otherwise None is returned."},{"line_number":601,"context_line":"    \"\"\""},{"line_number":602,"context_line":"    required_memory \u003d CONF.memory_minimum"},{"line_number":603,"context_line":"    memory_av \u003d psutil.virtual_memory().available"},{"line_number":604,"context_line":"    # NOTE(TheJulia): The .available value is the memory that can be given"},{"line_number":605,"context_line":"    # to a process without the process beginning to swap."},{"line_number":606,"context_line":"    # The .free value allows the process to swap its data, but given use"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_dabcf4dd","line":603,"in_reply_to":"9f560f44_b771e87a","updated":"2020-08-20 21:23:43.000000000","message":"why?  We require it elsewhere....","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"149a7b930dd707781eb5658668d131c7bbee2a6b","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        log_values \u003d {"},{"line_number":613,"context_line":"            \u0027available\u0027: memory_av,"},{"line_number":614,"context_line":"            \u0027required\u0027: required_memory,"},{"line_number":615,"context_line":"        }"},{"line_number":616,"context_line":"        if loop_count \u003e\u003d CONF.memory_wait_retries:"},{"line_number":617,"context_line":"            LOG.debug(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":618,"context_line":"                      \u0027%(required)s. Notifying caller that we have \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_94ead5a9","line":615,"updated":"2020-08-12 06:09:07.000000000","message":"I feel the loop logic should be moved out of this method, or at lease these configuration options supplied as arguments.\nOr rename the method name to something like \"wait_for_available_memory\"?","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"93d9e1c1f159d4a16ff57a269e0dd05b9a64cec9","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                    \u0027%(required)s, waiting.\u0027, log_values)"},{"line_number":624,"context_line":"        # Sleep so interpreter can switch threads."},{"line_number":625,"context_line":"        time.sleep(CONF.memory_wait_time)"},{"line_number":626,"context_line":"        memory_av \u003d psutil.virtual_memory().available / 1024 / 1024"},{"line_number":627,"context_line":"        loop_count \u003d loop_count + 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_7726306b","line":626,"updated":"2020-08-11 08:56:52.000000000","message":"wondering if we can extrapolate this to a private function and replace it in L603 too, removing L609","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"149a7b930dd707781eb5658668d131c7bbee2a6b","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                    \u0027%(required)s, waiting.\u0027, log_values)"},{"line_number":624,"context_line":"        # Sleep so interpreter can switch threads."},{"line_number":625,"context_line":"        time.sleep(CONF.memory_wait_time)"},{"line_number":626,"context_line":"        memory_av \u003d psutil.virtual_memory().available / 1024 / 1024"},{"line_number":627,"context_line":"        loop_count \u003d loop_count + 1"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_94b5b5d0","line":626,"in_reply_to":"9f560f44_7726306b","updated":"2020-08-12 06:09:07.000000000","message":"A good piece to put into utils I guess.","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc05caa1c44d57b8b4982c7fd17fe24d5e98a986","unresolved":false,"context_lines":[{"line_number":585,"context_line":""},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"def _get_mb_ram_available():"},{"line_number":588,"context_line":"    # NOTE(TheJulia): The .available value is the memory that can be given"},{"line_number":589,"context_line":"    # to a process without the process beginning to swap."},{"line_number":590,"context_line":"    # The .free value allows the process to swap its data, but given use"},{"line_number":591,"context_line":"    # case we shouldn\u0027t use the free option as it will involve more disk"},{"line_number":592,"context_line":"    # IO which is something a well behaved process seeks to avoid."},{"line_number":593,"context_line":"    return psutil.virtual_memory().available / 1024 / 1024"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_fd45ed17","line":592,"range":{"start_line":588,"start_character":2,"end_line":592,"end_character":66},"updated":"2020-09-29 14:13:16.000000000","message":"Available includes caches that can be flushed to the disk, swap or no swap. Free includes purely free RAM that on a well loaded system should be pretty low. TL;DR available is the right thing to use, but not exactly for the swap reason.","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"274cef764ce591c041c0ea8ac0c4c7aa6f0d9a31","unresolved":false,"context_lines":[{"line_number":585,"context_line":""},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"def _get_mb_ram_available():"},{"line_number":588,"context_line":"    # NOTE(TheJulia): The .available value is the memory that can be given"},{"line_number":589,"context_line":"    # to a process without the process beginning to swap."},{"line_number":590,"context_line":"    # The .free value allows the process to swap its data, but given use"},{"line_number":591,"context_line":"    # case we shouldn\u0027t use the free option as it will involve more disk"},{"line_number":592,"context_line":"    # IO which is something a well behaved process seeks to avoid."},{"line_number":593,"context_line":"    return psutil.virtual_memory().available / 1024 / 1024"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_9e5ae7ef","line":592,"range":{"start_line":588,"start_character":2,"end_line":592,"end_character":66},"in_reply_to":"9f560f44_fd45ed17","updated":"2020-09-30 20:19:04.000000000","message":"Deleting the additional comment and clarifying the first since which one to use seems to have been a point of contention.","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc05caa1c44d57b8b4982c7fd17fe24d5e98a986","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            \u0027available\u0027: _get_mb_ram_available(),"},{"line_number":616,"context_line":"            \u0027required\u0027: required_memory,"},{"line_number":617,"context_line":"        }"},{"line_number":618,"context_line":"        if loop_count \u003e\u003d CONF.minimum_memory_wait_retries:"},{"line_number":619,"context_line":"            LOG.debug(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":620,"context_line":"                      \u0027%(required)s. Notifying caller that we have \u0027"},{"line_number":621,"context_line":"                      \u0027exceeded retries.\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_5d7699a5","line":618,"updated":"2020-09-29 14:13:16.000000000","message":"nit: use retrying/tenacity","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"274cef764ce591c041c0ea8ac0c4c7aa6f0d9a31","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            \u0027available\u0027: _get_mb_ram_available(),"},{"line_number":616,"context_line":"            \u0027required\u0027: required_memory,"},{"line_number":617,"context_line":"        }"},{"line_number":618,"context_line":"        if loop_count \u003e\u003d CONF.minimum_memory_wait_retries:"},{"line_number":619,"context_line":"            LOG.debug(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":620,"context_line":"                      \u0027%(required)s. Notifying caller that we have \u0027"},{"line_number":621,"context_line":"                      \u0027exceeded retries.\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_3efe3baf","line":618,"in_reply_to":"9f560f44_5d7699a5","updated":"2020-09-30 20:19:04.000000000","message":"Not sure that gains us anything with this pattern...","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc05caa1c44d57b8b4982c7fd17fe24d5e98a986","unresolved":false,"context_lines":[{"line_number":616,"context_line":"            \u0027required\u0027: required_memory,"},{"line_number":617,"context_line":"        }"},{"line_number":618,"context_line":"        if loop_count \u003e\u003d CONF.minimum_memory_wait_retries:"},{"line_number":619,"context_line":"            LOG.debug(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":620,"context_line":"                      \u0027%(required)s. Notifying caller that we have \u0027"},{"line_number":621,"context_line":"                      \u0027exceeded retries.\u0027,"},{"line_number":622,"context_line":"                      log_values)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_fd3b2dc6","line":619,"range":{"start_line":619,"start_character":16,"end_line":619,"end_character":21},"updated":"2020-09-29 14:13:16.000000000","message":"s/debug/error/","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"274cef764ce591c041c0ea8ac0c4c7aa6f0d9a31","unresolved":false,"context_lines":[{"line_number":616,"context_line":"            \u0027required\u0027: required_memory,"},{"line_number":617,"context_line":"        }"},{"line_number":618,"context_line":"        if loop_count \u003e\u003d CONF.minimum_memory_wait_retries:"},{"line_number":619,"context_line":"            LOG.debug(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":620,"context_line":"                      \u0027%(required)s. Notifying caller that we have \u0027"},{"line_number":621,"context_line":"                      \u0027exceeded retries.\u0027,"},{"line_number":622,"context_line":"                      log_values)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_1efb77be","line":619,"range":{"start_line":619,"start_character":16,"end_line":619,"end_character":21},"in_reply_to":"9f560f44_fd3b2dc6","updated":"2020-09-30 20:19:04.000000000","message":"Done","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc05caa1c44d57b8b4982c7fd17fe24d5e98a986","unresolved":false,"context_lines":[{"line_number":621,"context_line":"                      \u0027exceeded retries.\u0027,"},{"line_number":622,"context_line":"                      log_values)"},{"line_number":623,"context_line":"            return True"},{"line_number":624,"context_line":"        LOG.warning(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":625,"context_line":"                    \u0027%(required)s, waiting.\u0027, log_values)"},{"line_number":626,"context_line":"        # Sleep so interpreter can switch threads."},{"line_number":627,"context_line":"        time.sleep(CONF.minimum_memory_wait_time)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_1d438141","line":624,"range":{"start_line":624,"start_character":48,"end_line":624,"end_character":50},"updated":"2020-09-29 14:13:16.000000000","message":"nit: MiB?","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"274cef764ce591c041c0ea8ac0c4c7aa6f0d9a31","unresolved":false,"context_lines":[{"line_number":621,"context_line":"                      \u0027exceeded retries.\u0027,"},{"line_number":622,"context_line":"                      log_values)"},{"line_number":623,"context_line":"            return True"},{"line_number":624,"context_line":"        LOG.warning(\u0027Memory is at %(available)s MB, required is \u0027"},{"line_number":625,"context_line":"                    \u0027%(required)s, waiting.\u0027, log_values)"},{"line_number":626,"context_line":"        # Sleep so interpreter can switch threads."},{"line_number":627,"context_line":"        time.sleep(CONF.minimum_memory_wait_time)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_5ed32f38","line":624,"range":{"start_line":624,"start_character":48,"end_line":624,"end_character":50},"in_reply_to":"9f560f44_1d438141","updated":"2020-09-30 20:19:04.000000000","message":"Done","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ff23e500644a06fd551dd733fd9fb3d88b984fea","unresolved":false,"context_lines":[{"line_number":593,"context_line":"def _get_mb_ram_available():"},{"line_number":594,"context_line":"    # NOTE(TheJulia): The .available value is the memory that can be given"},{"line_number":595,"context_line":"    # to a process without this process beginning to swap itself."},{"line_number":596,"context_line":"    return psutil.virtual_memory().available / 1024 / 1024"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"def is_memory_insufficent(raise_if_fail\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":22,"id":"e55cf956_688b85ef","line":596,"updated":"2021-02-12 12:58:26.000000000","message":"nit: / oslo_utils.units.Mi","commit_id":"d9913370de4046f8818cfbf47fd775a50275d0a1"}],"ironic/conf/default.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0b1bf5d7245a0d7c68d7a035e1211486889740be","unresolved":false,"context_lines":[{"line_number":364,"context_line":"                      \u0027retry.\u0027)),"},{"line_number":365,"context_line":"    cfg.IntOpt(\u0027memory_wait_retries\u0027,"},{"line_number":366,"context_line":"               mutable\u003dTrue,"},{"line_number":367,"context_line":"               default\u003d6,"},{"line_number":368,"context_line":"               help\u003d_(\u0027Number of retries to hold onto the worker before \u0027"},{"line_number":369,"context_line":"                      \u0027failing or returning the thread to the pool if \u0027"},{"line_number":370,"context_line":"                      \u0027the conductor can automatically retry.\u0027)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_51b84829","line":367,"updated":"2020-05-11 10:23:09.000000000","message":"This is 90 seconds of sleep. On one hand, it may not be enough for a large image to be converted. On the other - it\u0027s quite a lot to lock a thread for... Not sure what to do, mostly thinking aloud.","commit_id":"4ba0c0cbc67957748edc260b771a6cee61cfa7e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"89c9fdbc246be2df39183ac1839430d50e4e4446","unresolved":false,"context_lines":[{"line_number":364,"context_line":"                      \u0027retry.\u0027)),"},{"line_number":365,"context_line":"    cfg.IntOpt(\u0027memory_wait_retries\u0027,"},{"line_number":366,"context_line":"               mutable\u003dTrue,"},{"line_number":367,"context_line":"               default\u003d6,"},{"line_number":368,"context_line":"               help\u003d_(\u0027Number of retries to hold onto the worker before \u0027"},{"line_number":369,"context_line":"                      \u0027failing or returning the thread to the pool if \u0027"},{"line_number":370,"context_line":"                      \u0027the conductor can automatically retry.\u0027)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_a3de163b","line":367,"in_reply_to":"ff570b3c_51b84829","updated":"2020-06-02 21:50:14.000000000","message":"I thought about this and I think I\u0027m it is actually best to just let things kind of queue up with-in the thread pool if someone dumps a lot of jobs in place. The tasks should continue, but eventually the conductor wouldn\u0027t be able to take more, which is really a good thing because the conductor doesn\u0027t have the resources to do much else.","commit_id":"4ba0c0cbc67957748edc260b771a6cee61cfa7e1"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"ab2eb5bbaa3d36c5e5821a9e0ac6c6a449a58e10","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    cfg.IntOpt(\u0027memory_minimum\u0027,"},{"line_number":352,"context_line":"               mutable\u003dTrue,"},{"line_number":353,"context_line":"               default\u003d1024,"},{"line_number":354,"context_line":"               help\u003d_(\u0027Miniumum memory in Megabytes for the system to have \u0027"},{"line_number":355,"context_line":"                      \u0027available prior to starting a memory intensive \u0027"},{"line_number":356,"context_line":"                      \u0027process before launching a memory intensive process\u0027"},{"line_number":357,"context_line":"                      \u0027on the conductor\u0027)),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_b1f86ec4","line":354,"range":{"start_line":354,"start_character":23,"end_line":354,"end_character":31},"updated":"2020-07-07 14:19:27.000000000","message":"Minimum","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2463da2c628d293912eee208ca757eec10bc2b6","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    cfg.IntOpt(\u0027memory_minimum\u0027,"},{"line_number":352,"context_line":"               mutable\u003dTrue,"},{"line_number":353,"context_line":"               default\u003d1024,"},{"line_number":354,"context_line":"               help\u003d_(\u0027Miniumum memory in Megabytes for the system to have \u0027"},{"line_number":355,"context_line":"                      \u0027available prior to starting a memory intensive \u0027"},{"line_number":356,"context_line":"                      \u0027process before launching a memory intensive process\u0027"},{"line_number":357,"context_line":"                      \u0027on the conductor\u0027)),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_6eaeede7","line":354,"range":{"start_line":354,"start_character":23,"end_line":354,"end_character":31},"in_reply_to":"bf51134e_b1f86ec4","updated":"2020-07-08 13:42:29.000000000","message":"Done","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"ab2eb5bbaa3d36c5e5821a9e0ac6c6a449a58e10","unresolved":false,"context_lines":[{"line_number":353,"context_line":"               default\u003d1024,"},{"line_number":354,"context_line":"               help\u003d_(\u0027Miniumum memory in Megabytes for the system to have \u0027"},{"line_number":355,"context_line":"                      \u0027available prior to starting a memory intensive \u0027"},{"line_number":356,"context_line":"                      \u0027process before launching a memory intensive process\u0027"},{"line_number":357,"context_line":"                      \u0027on the conductor\u0027)),"},{"line_number":358,"context_line":"    cfg.IntOpt(\u0027memory_wait_time\u0027,"},{"line_number":359,"context_line":"               mutable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_f102e6b3","line":356,"range":{"start_line":356,"start_character":31,"end_line":356,"end_character":74},"updated":"2020-07-07 14:19:27.000000000","message":"drop","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2463da2c628d293912eee208ca757eec10bc2b6","unresolved":false,"context_lines":[{"line_number":353,"context_line":"               default\u003d1024,"},{"line_number":354,"context_line":"               help\u003d_(\u0027Miniumum memory in Megabytes for the system to have \u0027"},{"line_number":355,"context_line":"                      \u0027available prior to starting a memory intensive \u0027"},{"line_number":356,"context_line":"                      \u0027process before launching a memory intensive process\u0027"},{"line_number":357,"context_line":"                      \u0027on the conductor\u0027)),"},{"line_number":358,"context_line":"    cfg.IntOpt(\u0027memory_wait_time\u0027,"},{"line_number":359,"context_line":"               mutable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_0ea811d9","line":356,"range":{"start_line":356,"start_character":31,"end_line":356,"end_character":74},"in_reply_to":"bf51134e_f102e6b3","updated":"2020-07-08 13:42:29.000000000","message":"Done","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"570f3ab169ffdb674a138870024cc72eacc1d22d","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    cfg.IntOpt(\u0027memory_minimum\u0027,"},{"line_number":352,"context_line":"               mutable\u003dTrue,"},{"line_number":353,"context_line":"               default\u003d1024,"},{"line_number":354,"context_line":"               help\u003d_(\u0027Minimum memory in Megabytes for the system to have \u0027"},{"line_number":355,"context_line":"                      \u0027available prior to starting a memory intensive \u0027"},{"line_number":356,"context_line":"                      \u0027process on the conductor.\u0027)),"},{"line_number":357,"context_line":"    cfg.IntOpt(\u0027memory_wait_time\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_85111760","line":354,"updated":"2020-07-16 14:37:57.000000000","message":"Megabytes is not exactly correct, maybe use just MiB","commit_id":"c19b57f0db9b70ea733bf23bf4e45843264ae9cf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"570f3ab169ffdb674a138870024cc72eacc1d22d","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                      \u0027process on the conductor.\u0027)),"},{"line_number":357,"context_line":"    cfg.IntOpt(\u0027memory_wait_time\u0027,"},{"line_number":358,"context_line":"               mutable\u003dTrue,"},{"line_number":359,"context_line":"               default\u003d15,"},{"line_number":360,"context_line":"               help\u003d_(\u0027Seconds to wait between retries for free memory \u0027"},{"line_number":361,"context_line":"                      \u0027before launching the process. This, combined with \u0027"},{"line_number":362,"context_line":"                      \u0027``memory_wait_retries`` allows the conductor to \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_6514c34d","line":359,"updated":"2020-07-16 14:37:57.000000000","message":"You\u0027re going to lock a node for 90 seconds in DEPLOYING without a way out. I\u0027d use something much more conservative by default, to be honest.","commit_id":"c19b57f0db9b70ea733bf23bf4e45843264ae9cf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a6d38b20630c47d636c61b1e5277c1801f82d9f4","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                      \u0027process on the conductor.\u0027)),"},{"line_number":357,"context_line":"    cfg.IntOpt(\u0027memory_wait_time\u0027,"},{"line_number":358,"context_line":"               mutable\u003dTrue,"},{"line_number":359,"context_line":"               default\u003d15,"},{"line_number":360,"context_line":"               help\u003d_(\u0027Seconds to wait between retries for free memory \u0027"},{"line_number":361,"context_line":"                      \u0027before launching the process. This, combined with \u0027"},{"line_number":362,"context_line":"                      \u0027``memory_wait_retries`` allows the conductor to \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_3938329e","line":359,"in_reply_to":"bf51134e_6514c34d","updated":"2020-08-20 21:23:43.000000000","message":"Lower the amount of time between checks and increase the retries? The conundrum is that we will have to pause somewhere otherwise we need to just begin failing all the work in flight.","commit_id":"c19b57f0db9b70ea733bf23bf4e45843264ae9cf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ff23e500644a06fd551dd733fd9fb3d88b984fea","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                        (\u0027json-rpc\u0027, _(\u0027use JSON RPC transport\u0027))],"},{"line_number":353,"context_line":"               help\u003d_(\u0027Which RPC transport implementation to use between \u0027"},{"line_number":354,"context_line":"                      \u0027conductor and API services\u0027)),"},{"line_number":355,"context_line":"    cfg.BoolOpt(\u0027minimum_memory_warning_only\u0027,"},{"line_number":356,"context_line":"                mutable\u003dTrue,"},{"line_number":357,"context_line":"                default\u003dTrue,"},{"line_number":358,"context_line":"                help\u003d_(\u0027Setting to govern if Ironic should only warn instead \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"eee2debb_c670e72e","line":355,"updated":"2021-02-12 12:58:26.000000000","message":"I don\u0027t want to block the patch further.. but these 4 options should probably have a group of their own. Maybe follow-up with deprecation (doh..)?","commit_id":"d9913370de4046f8818cfbf47fd775a50275d0a1"}],"ironic/drivers/modules/image_cache.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"570f3ab169ffdb674a138870024cc72eacc1d22d","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            directory \u003d os.path.dirname(path_tmp)"},{"line_number":319,"context_line":"            _clean_up_caches(directory, required_space)"},{"line_number":320,"context_line":"        if utils.is_memory_insufficent():"},{"line_number":321,"context_line":"            raise exception.InsufficentMemory()"},{"line_number":322,"context_line":"        images.image_to_raw(image_href, path, path_tmp)"},{"line_number":323,"context_line":"    else:"},{"line_number":324,"context_line":"        os.rename(path_tmp, path)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_c50e6f39","line":321,"updated":"2020-07-16 14:37:57.000000000","message":"Shouldn\u0027t this be moved to image_to_raw? In case we call it anywhere else?","commit_id":"c19b57f0db9b70ea733bf23bf4e45843264ae9cf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a6d38b20630c47d636c61b1e5277c1801f82d9f4","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            directory \u003d os.path.dirname(path_tmp)"},{"line_number":319,"context_line":"            _clean_up_caches(directory, required_space)"},{"line_number":320,"context_line":"        if utils.is_memory_insufficent():"},{"line_number":321,"context_line":"            raise exception.InsufficentMemory()"},{"line_number":322,"context_line":"        images.image_to_raw(image_href, path, path_tmp)"},{"line_number":323,"context_line":"    else:"},{"line_number":324,"context_line":"        os.rename(path_tmp, path)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_f9187a1e","line":321,"in_reply_to":"bf51134e_c50e6f39","updated":"2020-08-20 21:23:43.000000000","message":"Seems reasonable and possible with the raw check now present as well.","commit_id":"c19b57f0db9b70ea733bf23bf4e45843264ae9cf"}],"ironic/drivers/modules/iscsi_deploy.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0b1bf5d7245a0d7c68d7a035e1211486889740be","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        task.process_event(\u0027resume\u0027)"},{"line_number":618,"context_line":"        node \u003d task.node"},{"line_number":619,"context_line":"        LOG.debug(\u0027Continuing the deployment on node %s\u0027, node.uuid)"},{"line_number":620,"context_line":"        if utils.hold_if_freemem_insufficent():"},{"line_number":621,"context_line":"            # Insufficent memory, but we can just let the agent heartbeat"},{"line_number":622,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":623,"context_line":"            # changed."}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_d1a4580b","line":620,"updated":"2020-05-11 10:23:09.000000000","message":"We need to move this up the stack probably. When converted to a deploy step, returning DEPLOYWAIT may have an unexpected result here.","commit_id":"4ba0c0cbc67957748edc260b771a6cee61cfa7e1"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"89c9fdbc246be2df39183ac1839430d50e4e4446","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        task.process_event(\u0027resume\u0027)"},{"line_number":618,"context_line":"        node \u003d task.node"},{"line_number":619,"context_line":"        LOG.debug(\u0027Continuing the deployment on node %s\u0027, node.uuid)"},{"line_number":620,"context_line":"        if utils.hold_if_freemem_insufficent():"},{"line_number":621,"context_line":"            # Insufficent memory, but we can just let the agent heartbeat"},{"line_number":622,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":623,"context_line":"            # changed."}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_4373ba16","line":620,"in_reply_to":"ff570b3c_d1a4580b","updated":"2020-06-02 21:50:14.000000000","message":"gah! :(\n\nWhat if we then had its own step? Could that even be feasible?","commit_id":"4ba0c0cbc67957748edc260b771a6cee61cfa7e1"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ba0fa5cd6bc9b8a51bdd2aad9fb7714a6481d4a8","unresolved":false,"context_lines":[{"line_number":708,"context_line":"            # Insufficent memory, but we can just let the agent heartbeat"},{"line_number":709,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":710,"context_line":"            # changed."},{"line_number":711,"context_line":"            return states.DEPLOYWAI"},{"line_number":712,"context_line":"        uuid_dict_returned \u003d do_agent_iscsi_deploy(task, self._client)"},{"line_number":713,"context_line":"        root_uuid \u003d uuid_dict_returned.get(\u0027root uuid\u0027)"},{"line_number":714,"context_line":"        efi_sys_uuid \u003d uuid_dict_returned.get(\u0027efi system partition uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_b5036c0f","line":711,"updated":"2020-07-02 20:58:35.000000000","message":"DEPLOYWAIT?","commit_id":"d5010d2a4e5bafbefaf91149728f977151d12e09"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fc281b7b67288f2ff751c4b09b6f0b74b8f8244e","unresolved":false,"context_lines":[{"line_number":708,"context_line":"            # Insufficent memory, but we can just let the agent heartbeat"},{"line_number":709,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":710,"context_line":"            # changed."},{"line_number":711,"context_line":"            return states.DEPLOYWAI"},{"line_number":712,"context_line":"        uuid_dict_returned \u003d do_agent_iscsi_deploy(task, self._client)"},{"line_number":713,"context_line":"        root_uuid \u003d uuid_dict_returned.get(\u0027root uuid\u0027)"},{"line_number":714,"context_line":"        efi_sys_uuid \u003d uuid_dict_returned.get(\u0027efi system partition uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_6c6f31fc","line":711,"in_reply_to":"bf51134e_b5036c0f","updated":"2020-07-06 17:38:48.000000000","message":"/me blinks","commit_id":"d5010d2a4e5bafbefaf91149728f977151d12e09"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"570f3ab169ffdb674a138870024cc72eacc1d22d","unresolved":false,"context_lines":[{"line_number":709,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":710,"context_line":"            # changed."},{"line_number":711,"context_line":"            task.process_event(\u0027wait\u0027)"},{"line_number":712,"context_line":"            return states.DEPLOYWAIT"},{"line_number":713,"context_line":"        uuid_dict_returned \u003d do_agent_iscsi_deploy(task, self._client)"},{"line_number":714,"context_line":"        root_uuid \u003d uuid_dict_returned.get(\u0027root uuid\u0027)"},{"line_number":715,"context_line":"        efi_sys_uuid \u003d uuid_dict_returned.get(\u0027efi system partition uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_a509bb31","line":712,"updated":"2020-07-16 14:37:57.000000000","message":"1) This will need to be reworked for deploy steps to make sure we continue from the same step\n\n2) What is going to happen if the memory is never enough? Are we going to timeout or just wait forever (I suspect the latter)?","commit_id":"c19b57f0db9b70ea733bf23bf4e45843264ae9cf"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"5b04e32ce0ce657b423272a166691e0d99e67783","unresolved":false,"context_lines":[{"line_number":704,"context_line":"            info[\u0027skip_current_deploy_step\u0027] \u003d True"},{"line_number":705,"context_line":"            node.driver_internal_info \u003d info"},{"line_number":706,"context_line":"            node.save()"},{"line_number":707,"context_line":"            return states.DEPLOYWAIT"},{"line_number":708,"context_line":"        uuid_dict_returned \u003d do_agent_iscsi_deploy(task, self._client)"},{"line_number":709,"context_line":"        utils.set_node_nested_field(node, \u0027driver_internal_info\u0027,"},{"line_number":710,"context_line":"                                    \u0027deployment_uuids\u0027, uuid_dict_returned)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_5decd928","line":707,"updated":"2020-08-12 15:23:17.000000000","message":"Another thing worth mentioning, we may reach deploy timeout under consistent memory insufficient situation, and this will provide no evidence on that. We may need to consider a way to properly log that in the last_error.","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a6d38b20630c47d636c61b1e5277c1801f82d9f4","unresolved":false,"context_lines":[{"line_number":704,"context_line":"            info[\u0027skip_current_deploy_step\u0027] \u003d True"},{"line_number":705,"context_line":"            node.driver_internal_info \u003d info"},{"line_number":706,"context_line":"            node.save()"},{"line_number":707,"context_line":"            return states.DEPLOYWAIT"},{"line_number":708,"context_line":"        uuid_dict_returned \u003d do_agent_iscsi_deploy(task, self._client)"},{"line_number":709,"context_line":"        utils.set_node_nested_field(node, \u0027driver_internal_info\u0027,"},{"line_number":710,"context_line":"                                    \u0027deployment_uuids\u0027, uuid_dict_returned)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_1a25cc5c","line":707,"in_reply_to":"9f560f44_5decd928","updated":"2020-08-20 21:23:43.000000000","message":"Hmm... this is where a last error or error journal would be handy.","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc05caa1c44d57b8b4982c7fd17fe24d5e98a986","unresolved":false,"context_lines":[{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        node \u003d task.node"},{"line_number":699,"context_line":"        LOG.debug(\u0027Continuing the deployment on node %s\u0027, node.uuid)"},{"line_number":700,"context_line":"        if utils.is_memory_insufficent():"},{"line_number":701,"context_line":"            # Insufficent memory, but we can just let the agent heartbeat"},{"line_number":702,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":703,"context_line":"            # changed."}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_5d84d95d","line":700,"updated":"2020-09-29 14:13:16.000000000","message":"This is going to block for 90 seconds before letting it go. This may be equivalent to 3 (?) heartbeats, I wonder if we should skip retries here.","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"274cef764ce591c041c0ea8ac0c4c7aa6f0d9a31","unresolved":false,"context_lines":[{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        node \u003d task.node"},{"line_number":699,"context_line":"        LOG.debug(\u0027Continuing the deployment on node %s\u0027, node.uuid)"},{"line_number":700,"context_line":"        if utils.is_memory_insufficent():"},{"line_number":701,"context_line":"            # Insufficent memory, but we can just let the agent heartbeat"},{"line_number":702,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":703,"context_line":"            # changed."}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_feca036d","line":700,"in_reply_to":"9f560f44_5d84d95d","updated":"2020-09-30 20:19:04.000000000","message":"I think retries are fine since while yes it is going to back it up hopefully that time would give the system enough time to settle.","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc05caa1c44d57b8b4982c7fd17fe24d5e98a986","unresolved":false,"context_lines":[{"line_number":701,"context_line":"            # Insufficent memory, but we can just let the agent heartbeat"},{"line_number":702,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":703,"context_line":"            # changed."},{"line_number":704,"context_line":"            LOG.debug(\u0027Insufficent memory to write image for node %(node)s. \u0027"},{"line_number":705,"context_line":"                      \u0027Skipping until next heartbeat.\u0027, {\u0027node\u0027: node.uuid})"},{"line_number":706,"context_line":"            info \u003d node.driver_internal_info"},{"line_number":707,"context_line":"            info[\u0027skip_current_deploy_step\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_bda095f5","line":704,"updated":"2020-09-29 14:13:16.000000000","message":"s/debug/warning/","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"274cef764ce591c041c0ea8ac0c4c7aa6f0d9a31","unresolved":false,"context_lines":[{"line_number":701,"context_line":"            # Insufficent memory, but we can just let the agent heartbeat"},{"line_number":702,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":703,"context_line":"            # changed."},{"line_number":704,"context_line":"            LOG.debug(\u0027Insufficent memory to write image for node %(node)s. \u0027"},{"line_number":705,"context_line":"                      \u0027Skipping until next heartbeat.\u0027, {\u0027node\u0027: node.uuid})"},{"line_number":706,"context_line":"            info \u003d node.driver_internal_info"},{"line_number":707,"context_line":"            info[\u0027skip_current_deploy_step\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_1e97f747","line":704,"in_reply_to":"9f560f44_bda095f5","updated":"2020-09-30 20:19:04.000000000","message":"Done","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"bc05caa1c44d57b8b4982c7fd17fe24d5e98a986","unresolved":false,"context_lines":[{"line_number":704,"context_line":"            LOG.debug(\u0027Insufficent memory to write image for node %(node)s. \u0027"},{"line_number":705,"context_line":"                      \u0027Skipping until next heartbeat.\u0027, {\u0027node\u0027: node.uuid})"},{"line_number":706,"context_line":"            info \u003d node.driver_internal_info"},{"line_number":707,"context_line":"            info[\u0027skip_current_deploy_step\u0027] \u003d True"},{"line_number":708,"context_line":"            node.driver_internal_info \u003d info"},{"line_number":709,"context_line":"            node.last_error \u003d \"Deploy delayed due to insufficent memory\""},{"line_number":710,"context_line":"            node.save()"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_1d8a6163","line":707,"updated":"2020-09-29 14:13:16.000000000","message":"False","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"274cef764ce591c041c0ea8ac0c4c7aa6f0d9a31","unresolved":false,"context_lines":[{"line_number":704,"context_line":"            LOG.debug(\u0027Insufficent memory to write image for node %(node)s. \u0027"},{"line_number":705,"context_line":"                      \u0027Skipping until next heartbeat.\u0027, {\u0027node\u0027: node.uuid})"},{"line_number":706,"context_line":"            info \u003d node.driver_internal_info"},{"line_number":707,"context_line":"            info[\u0027skip_current_deploy_step\u0027] \u003d True"},{"line_number":708,"context_line":"            node.driver_internal_info \u003d info"},{"line_number":709,"context_line":"            node.last_error \u003d \"Deploy delayed due to insufficent memory\""},{"line_number":710,"context_line":"            node.save()"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f560f44_3e9abb6e","line":707,"in_reply_to":"9f560f44_1d8a6163","updated":"2020-09-30 20:19:04.000000000","message":"Done","commit_id":"29e64436789747d10b2a99efe134c815912133c8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"40139c6fee949b155ca1f4fc4e673a7d20b4d297","unresolved":false,"context_lines":[{"line_number":697,"context_line":""},{"line_number":698,"context_line":"        node \u003d task.node"},{"line_number":699,"context_line":"        LOG.debug(\u0027Continuing the deployment on node %s\u0027, node.uuid)"},{"line_number":700,"context_line":"        if utils.is_memory_insufficent():"},{"line_number":701,"context_line":"            # Insufficent memory, but we can just let the agent heartbeat"},{"line_number":702,"context_line":"            # again in order to initiate deployment when the situation has"},{"line_number":703,"context_line":"            # changed."}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_1ef6d75e","line":700,"updated":"2020-09-29 16:50:45.000000000","message":"I\u0027d still prefer this not to block for 90 seconds, but it\u0027s not blocking (heh) this patch.","commit_id":"e66ca7ca41f156fe25e5986149b7e5352b511b62"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ff23e500644a06fd551dd733fd9fb3d88b984fea","unresolved":false,"context_lines":[{"line_number":709,"context_line":"            info \u003d node.driver_internal_info"},{"line_number":710,"context_line":"            info[\u0027skip_current_deploy_step\u0027] \u003d False"},{"line_number":711,"context_line":"            node.driver_internal_info \u003d info"},{"line_number":712,"context_line":"            node.last_error \u003d \"Deploy delayed due to insufficent memory\""},{"line_number":713,"context_line":"            node.save()"},{"line_number":714,"context_line":"            return states.DEPLOYWAIT"},{"line_number":715,"context_line":"        uuid_dict_returned \u003d do_agent_iscsi_deploy(task, self._client)"}],"source_content_type":"text/x-python","patch_set":22,"id":"d21a7c7f_4d295599","line":712,"updated":"2021-02-12 12:58:26.000000000","message":"nit: _()","commit_id":"d9913370de4046f8818cfbf47fd775a50275d0a1"}],"ironic/tests/unit/drivers/modules/test_iscsi_deploy.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0be8f5f1428ec2f46ae26186fea8152343d30607","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"        self.assertFalse(mock_do_iscsi_deploy.called)"},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"    @mock.patch.object(manager_utils, \u0027restore_power_state_if_needed\u0027,"},{"line_number":1087,"context_line":"                       autospec\u003dTrue)"},{"line_number":1088,"context_line":"    @mock.patch.object(manager_utils, \u0027power_on_node_if_needed\u0027, autospec\u003dTrue)"},{"line_number":1089,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027attach_volumes\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"bf51134e_0aa9608f","line":1086,"updated":"2020-07-21 01:52:37.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"59c6d68af0dcdb584681c5dd2b7b8ac0c8062ab6"}],"releasenotes/notes/limit-memory-consumption-c7949a49853ba83d.yaml":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ba0fa5cd6bc9b8a51bdd2aad9fb7714a6481d4a8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    memory limit. The intent of tis is to prevent the conductor from running"},{"line_number":6,"context_line":"    the host out of memory when a large number of deployments have been"},{"line_number":7,"context_line":"    requested."},{"line_number":8,"context_line":"   "},{"line_number":9,"context_line":"    These settings can be tuned using the ``[DEFAULT]memory_minimum``,"},{"line_number":10,"context_line":"    ``[DEFAULT]memory_wait_time`` and ``[DEFAULT]memory_wait_retries``."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":4,"id":"bf51134e_20fefc04","line":8,"updated":"2020-07-02 20:58:35.000000000","message":"IDK if it\u0027ll mess up linting, but there\u0027s some extra whitespace here.","commit_id":"d5010d2a4e5bafbefaf91149728f977151d12e09"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"ab2eb5bbaa3d36c5e5821a9e0ac6c6a449a58e10","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``ironic-conductor`` process now has a concept of an internal"},{"line_number":5,"context_line":"    memory limit. The intent of tis is to prevent the conductor from running"},{"line_number":6,"context_line":"    the host out of memory when a large number of deployments have been"},{"line_number":7,"context_line":"    requested."},{"line_number":8,"context_line":"   "}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf51134e_7184160d","line":5,"range":{"start_line":5,"start_character":32,"end_line":5,"end_character":35},"updated":"2020-07-07 14:19:27.000000000","message":"this","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2463da2c628d293912eee208ca757eec10bc2b6","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``ironic-conductor`` process now has a concept of an internal"},{"line_number":5,"context_line":"    memory limit. The intent of tis is to prevent the conductor from running"},{"line_number":6,"context_line":"    the host out of memory when a large number of deployments have been"},{"line_number":7,"context_line":"    requested."},{"line_number":8,"context_line":"   "}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf51134e_6e970d92","line":5,"range":{"start_line":5,"start_character":32,"end_line":5,"end_character":35},"in_reply_to":"bf51134e_7184160d","updated":"2020-07-08 13:42:29.000000000","message":"Done","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"ab2eb5bbaa3d36c5e5821a9e0ac6c6a449a58e10","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    memory limit. The intent of tis is to prevent the conductor from running"},{"line_number":6,"context_line":"    the host out of memory when a large number of deployments have been"},{"line_number":7,"context_line":"    requested."},{"line_number":8,"context_line":"   "},{"line_number":9,"context_line":"    These settings can be tuned using the ``[DEFAULT]memory_minimum``,"},{"line_number":10,"context_line":"    ``[DEFAULT]memory_wait_time`` and ``[DEFAULT]memory_wait_retries``."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf51134e_b17d0e1e","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":3},"updated":"2020-07-07 14:19:27.000000000","message":"additional blanks","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2463da2c628d293912eee208ca757eec10bc2b6","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    memory limit. The intent of tis is to prevent the conductor from running"},{"line_number":6,"context_line":"    the host out of memory when a large number of deployments have been"},{"line_number":7,"context_line":"    requested."},{"line_number":8,"context_line":"   "},{"line_number":9,"context_line":"    These settings can be tuned using the ``[DEFAULT]memory_minimum``,"},{"line_number":10,"context_line":"    ``[DEFAULT]memory_wait_time`` and ``[DEFAULT]memory_wait_retries``."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf51134e_4e9209a1","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":3},"in_reply_to":"bf51134e_b17d0e1e","updated":"2020-07-08 13:42:29.000000000","message":"Done","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"ab2eb5bbaa3d36c5e5821a9e0ac6c6a449a58e10","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    Where possible, Ironic will attempt to wait out the time window, thus"},{"line_number":13,"context_line":"    consuming the conductor worker thread which will resume if the memory"},{"line_number":14,"context_line":"    becomes available. This will effectivly rate limit concurrency."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    If raw image conversions with-in the conductor is required, and a"},{"line_number":17,"context_line":"    situation exists where insufficent memory exists and it cannot be waited,"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf51134e_71b256e8","line":14,"updated":"2020-07-07 14:19:27.000000000","message":"effectively","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2463da2c628d293912eee208ca757eec10bc2b6","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    Where possible, Ironic will attempt to wait out the time window, thus"},{"line_number":13,"context_line":"    consuming the conductor worker thread which will resume if the memory"},{"line_number":14,"context_line":"    becomes available. This will effectivly rate limit concurrency."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    If raw image conversions with-in the conductor is required, and a"},{"line_number":17,"context_line":"    situation exists where insufficent memory exists and it cannot be waited,"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf51134e_ae91259c","line":14,"in_reply_to":"bf51134e_71b256e8","updated":"2020-07-08 13:42:29.000000000","message":"Done","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"ab2eb5bbaa3d36c5e5821a9e0ac6c6a449a58e10","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    If raw image conversions with-in the conductor is required, and a"},{"line_number":17,"context_line":"    situation exists where insufficent memory exists and it cannot be waited,"},{"line_number":18,"context_line":"    out the deployment operation will fail. For the ``iscsi`` deployment"},{"line_number":19,"context_line":"    interface, which is the other location in ironic that may consume large"},{"line_number":20,"context_line":"    amounts of memory, the conductor will wait until the next agent heartbeat."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf51134e_b1cb4e51","line":18,"range":{"start_line":18,"start_character":4,"end_line":18,"end_character":7},"updated":"2020-07-07 14:19:27.000000000","message":"drop","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2463da2c628d293912eee208ca757eec10bc2b6","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    If raw image conversions with-in the conductor is required, and a"},{"line_number":17,"context_line":"    situation exists where insufficent memory exists and it cannot be waited,"},{"line_number":18,"context_line":"    out the deployment operation will fail. For the ``iscsi`` deployment"},{"line_number":19,"context_line":"    interface, which is the other location in ironic that may consume large"},{"line_number":20,"context_line":"    amounts of memory, the conductor will wait until the next agent heartbeat."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bf51134e_8e8c2180","line":18,"range":{"start_line":18,"start_character":4,"end_line":18,"end_character":7},"in_reply_to":"bf51134e_b1cb4e51","updated":"2020-07-08 13:42:29.000000000","message":"Done","commit_id":"df8064c73c69a0c9ec09c926ec4ca4f7b7120e80"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"93d9e1c1f159d4a16ff57a269e0dd05b9a64cec9","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    memory limit. The intent of this is to prevent the conductor from running"},{"line_number":6,"context_line":"    the host out of memory when a large number of deployments have been"},{"line_number":7,"context_line":"    requested."},{"line_number":8,"context_line":"   "},{"line_number":9,"context_line":"    These settings can be tuned using the ``[DEFAULT]memory_minimum``,"},{"line_number":10,"context_line":"    ``[DEFAULT]memory_wait_time`` and ``[DEFAULT]memory_wait_retries``."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9f560f44_37d15831","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":3},"updated":"2020-08-11 08:56:52.000000000","message":"nit: blank spaces","commit_id":"fd3d6823b106445ceae6748eb4eed13b2e0e3675"}]}
