)]}'
{"ironic/conf/conductor.py":[{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"0e1fae39f797a149cc35c4ac9b2f9beeb5202c98","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                      \u0027number of times Ironic should try syncing the \u0027"},{"line_number":85,"context_line":"                      \u0027hardware node power state with the node power state \u0027"},{"line_number":86,"context_line":"                      \u0027in DB\u0027)),"},{"line_number":87,"context_line":"    cfg.IntOpt(\u0027config_job_max_retries\u0027,"},{"line_number":88,"context_line":"               default\u003d4,"},{"line_number":89,"context_line":"               help\u003d_(\u0027Maximum number of retries for \u0027"},{"line_number":90,"context_line":"                      \u0027the configuration job to complete \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"3fa7e38b_56195cd4","line":87,"updated":"2019-10-14 14:24:52.000000000","message":"I think this setting should remain in drac.py since it is a setting that\u0027s specific to the iDRAC driver.","commit_id":"79fcf0c15186d4d1074b7836a81899a5b44a11d4"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"425c43d99e19e8f557fdb665c90644a333116208","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                      \u0027number of times Ironic should try syncing the \u0027"},{"line_number":85,"context_line":"                      \u0027hardware node power state with the node power state \u0027"},{"line_number":86,"context_line":"                      \u0027in DB\u0027)),"},{"line_number":87,"context_line":"    cfg.IntOpt(\u0027config_job_max_retries\u0027,"},{"line_number":88,"context_line":"               default\u003d4,"},{"line_number":89,"context_line":"               help\u003d_(\u0027Maximum number of retries for \u0027"},{"line_number":90,"context_line":"                      \u0027the configuration job to complete \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"3fa7e38b_91befeab","line":87,"in_reply_to":"3fa7e38b_56195cd4","updated":"2019-10-14 15:08:13.000000000","message":"Thanks. done.","commit_id":"79fcf0c15186d4d1074b7836a81899a5b44a11d4"}],"ironic/conf/drac.py":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"defdb853fe530a84bcf0953b575dd35dd0c83bf2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                      \u0027the boot device configuration job to transition \u0027"},{"line_number":30,"context_line":"                      \u0027to the correct state to allow a reboot or power \u0027"},{"line_number":31,"context_line":"                      \u0027on to complete.\u0027)),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027wait_job_status_timeout\u0027,"},{"line_number":33,"context_line":"               default\u003d240,"},{"line_number":34,"context_line":"               min\u003d1,"},{"line_number":35,"context_line":"               help\u003d_(\u0027Maximum amount of retries to wait for \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_1843e743","line":32,"range":{"start_line":32,"start_character":16,"end_line":32,"end_character":39},"updated":"2019-09-30 14:55:03.000000000","message":"this isn\u0027t really a \u0027timeout\u0027 but a maximum number of retries\nI think a more clear name could be something like \u0027config_job_max_retries\u0027\nmore opinions welcome :)","commit_id":"5fc0755f327ba88d3c8cd896a3fb5977509abda2"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"0bc31c32fe91113ae850ff6bee049a113e510024","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                      \u0027the boot device configuration job to transition \u0027"},{"line_number":30,"context_line":"                      \u0027to the correct state to allow a reboot or power \u0027"},{"line_number":31,"context_line":"                      \u0027on to complete.\u0027)),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027wait_job_status_timeout\u0027,"},{"line_number":33,"context_line":"               default\u003d240,"},{"line_number":34,"context_line":"               min\u003d1,"},{"line_number":35,"context_line":"               help\u003d_(\u0027Maximum amount of retries to wait for \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_47e5fada","line":32,"range":{"start_line":32,"start_character":16,"end_line":32,"end_character":39},"in_reply_to":"3fa7e38b_1843e743","updated":"2019-09-30 19:45:59.000000000","message":"Sounds like a good change to me!","commit_id":"5fc0755f327ba88d3c8cd896a3fb5977509abda2"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"defdb853fe530a84bcf0953b575dd35dd0c83bf2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    cfg.IntOpt(\u0027wait_job_status_timeout\u0027,"},{"line_number":33,"context_line":"               default\u003d240,"},{"line_number":34,"context_line":"               min\u003d1,"},{"line_number":35,"context_line":"               help\u003d_(\u0027Maximum amount of retries to wait for \u0027"},{"line_number":36,"context_line":"                      \u0027the configuration job to complete \u0027"},{"line_number":37,"context_line":"                      \u0027successfully. \u0027))"},{"line_number":38,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_586e3fc9","line":35,"range":{"start_line":35,"start_character":31,"end_line":35,"end_character":37},"updated":"2019-09-30 14:55:03.000000000","message":"nit: number","commit_id":"5fc0755f327ba88d3c8cd896a3fb5977509abda2"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"defdb853fe530a84bcf0953b575dd35dd0c83bf2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    cfg.IntOpt(\u0027wait_job_status_timeout\u0027,"},{"line_number":33,"context_line":"               default\u003d240,"},{"line_number":34,"context_line":"               min\u003d1,"},{"line_number":35,"context_line":"               help\u003d_(\u0027Maximum amount of retries to wait for \u0027"},{"line_number":36,"context_line":"                      \u0027the configuration job to complete \u0027"},{"line_number":37,"context_line":"                      \u0027successfully. \u0027))"},{"line_number":38,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_78a69b11","line":35,"range":{"start_line":35,"start_character":49,"end_line":35,"end_character":56},"updated":"2019-09-30 14:55:03.000000000","message":"you can remove this","commit_id":"5fc0755f327ba88d3c8cd896a3fb5977509abda2"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"defdb853fe530a84bcf0953b575dd35dd0c83bf2","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               min\u003d1,"},{"line_number":35,"context_line":"               help\u003d_(\u0027Maximum amount of retries to wait for \u0027"},{"line_number":36,"context_line":"                      \u0027the configuration job to complete \u0027"},{"line_number":37,"context_line":"                      \u0027successfully. \u0027))"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_183e87c0","line":37,"range":{"start_line":37,"start_character":36,"end_line":37,"end_character":37},"updated":"2019-09-30 14:55:03.000000000","message":"nit: blank space","commit_id":"5fc0755f327ba88d3c8cd896a3fb5977509abda2"}],"ironic/drivers/modules/drac/job.py":[{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"6a618839bc2efaef7aafae869f1c3e4066e14147","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Validates the job queue on the node."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    It raises an exception if an unfinished configuration job exists."},{"line_number":36,"context_line":"    :param node: an ironic node object."},{"line_number":37,"context_line":"    :raises: DracOperationError on an error from python-dracclient."},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_35ecccf2","line":36,"updated":"2019-09-04 21:21:28.000000000","message":"Can you please add the blank line back in above?","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"09f24ae873d8ce64790f2cf1263b18ff8ba81d04","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Validates the job queue on the node."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    It raises an exception if an unfinished configuration job exists."},{"line_number":36,"context_line":"    :param node: an ironic node object."},{"line_number":37,"context_line":"    :raises: DracOperationError on an error from python-dracclient."},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5faad753_20bbcae2","line":36,"in_reply_to":"7faddb67_35ecccf2","updated":"2019-09-09 14:56:20.000000000","message":"Done","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"0fbf364ec5339404f5d711a59b88afd95c613257","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    :param node: an ironic node object."},{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    if list_unfinished_jobs(node):"},{"line_number":92,"context_line":"        while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"            sleep(10)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_33b9a62d","line":91,"updated":"2019-09-11 21:34:47.000000000","message":"I don\u0027t think we need the above \"if\" statement.  We could remove this, and then the \"while\" loop below would just exit without sleeping on the first iteration.","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"315769c7eb14957c6be837b21d260330de03a704","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    :param node: an ironic node object."},{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    if list_unfinished_jobs(node):"},{"line_number":92,"context_line":"        while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"            sleep(10)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_acc0b02b","line":91,"in_reply_to":"5faad753_33b9a62d","updated":"2019-09-13 08:31:13.000000000","message":"Yes. Done","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"dc156c2e1fd8bcfa3fc52c581a9fd4edfd7cfc5c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    if list_unfinished_jobs(node):"},{"line_number":92,"context_line":"        while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"            sleep(10)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_3ca88e75","line":93,"range":{"start_line":93,"start_character":18,"end_line":93,"end_character":20},"updated":"2019-09-12 07:19:41.000000000","message":"is 10 seconds really necessary for each iteration?","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    if list_unfinished_jobs(node):"},{"line_number":92,"context_line":"        while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"            sleep(10)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c76800bc","line":93,"range":{"start_line":93,"start_character":18,"end_line":93,"end_character":20},"in_reply_to":"5faad753_0520b79a","updated":"2019-09-16 15:12:23.000000000","message":"Done.","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"315769c7eb14957c6be837b21d260330de03a704","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    if list_unfinished_jobs(node):"},{"line_number":92,"context_line":"        while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"            sleep(10)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_8cc37438","line":93,"range":{"start_line":93,"start_character":18,"end_line":93,"end_character":20},"in_reply_to":"5faad753_3ca88e75","updated":"2019-09-13 08:31:13.000000000","message":"Hey Riccardo Pittau,\n\nI Appreciate your review on my patch.\nReason behind adding 10 seconds iteration is because iDRAC driver creates twice job if some controllers requires reboot to apply configuration on the targeted device. So we planned to give some amount of time to controller to completes its job without any error/interrupts.\nIf community wants we can reduce this sleep iteration.","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"8a98e732b435495b484e72224c8c256c5f51b4d3","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    if list_unfinished_jobs(node):"},{"line_number":92,"context_line":"        while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"            sleep(10)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_0520b79a","line":93,"range":{"start_line":93,"start_character":18,"end_line":93,"end_character":20},"in_reply_to":"5faad753_8cc37438","updated":"2019-09-13 08:57:31.000000000","message":"Hey Rachit, thank you for your answer, 10 seconds seems a lot to me, but I understand the reason behind it.\nIf it\u0027s possible to reduce it, then let\u0027s go for it.","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"f2d23ae13d762d37d8e03061f1ea68851e2384e3","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    :param node: an ironic node object."},{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    while list_unfinished_jobs(node):"},{"line_number":92,"context_line":"        sleep(5)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_311b2e1c","line":92,"updated":"2019-09-18 06:55:31.000000000","message":"I think the sleep time value should be configurable. Hard coding the value is not a good idea. I suggest introducing a new config value.","commit_id":"17192aedd0915c9f777521e086567fd208dbf4c8"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"afcb891f409935b31b675947e61d1ed96fd4be5c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    :param node: an ironic node object."},{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    while list_unfinished_jobs(node):"},{"line_number":92,"context_line":"        sleep(5)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_dd5bcb2b","line":92,"in_reply_to":"3fa7e38b_311b2e1c","updated":"2019-09-18 10:30:39.000000000","message":"Hey Madhuri,\nThanks for the review i have changed the code as you suggested.\n(FYI: Builtin function sleep() of time module takes an argument as floating point number for subsecond precision.)\nI personally don\u0027t think it is necessary to pass config value to sleep() function.","commit_id":"17192aedd0915c9f777521e086567fd208dbf4c8"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"fbdaa22221623874c8be0d4a921826df3e245ddd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"drac_exceptions \u003d importutils.try_import(\u0027dracclient.exceptions\u0027)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":"wait_clock \u003d 5"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def validate_job_queue(node):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_727a0125","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":10},"updated":"2019-09-18 12:54:04.000000000","message":"nit: this is actually a constant and should be all capital\nI have mixed feelings about moving the sleep value to a constant, but for now should be ok","commit_id":"b54aaaafff6eca4017b87b84d98d64c064ac0519"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c8b9f0e2d33eaea933f349061d7eb16e4c0c42cb","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    :param node: an ironic node object."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"        sleep(wait_clock)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_0dded210","line":92,"range":{"start_line":92,"start_character":10,"end_line":92,"end_character":37},"updated":"2019-09-22 00:07:12.000000000","message":"Please put an upper bounds on the amount of time that the conductor will wait.","commit_id":"b54aaaafff6eca4017b87b84d98d64c064ac0519"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c8b9f0e2d33eaea933f349061d7eb16e4c0c42cb","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    :param node: an ironic node object."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"        sleep(wait_clock)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_adc77e45","line":92,"updated":"2019-09-22 00:07:12.000000000","message":"So what happens if the remote BMC\u0027s job queue never clears out? In this case, it would look like we would loose this worker thread until the process is restarted which is kind of bad.","commit_id":"b54aaaafff6eca4017b87b84d98d64c064ac0519"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0b31c0ac3cfc23944fdc245c983b78e31fcdf8d3","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    :param node: an ironic node object."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"        sleep(wait_clock)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_452fbaa0","line":92,"range":{"start_line":92,"start_character":10,"end_line":92,"end_character":37},"in_reply_to":"3fa7e38b_0dded210","updated":"2019-09-23 08:23:53.000000000","message":"++","commit_id":"b54aaaafff6eca4017b87b84d98d64c064ac0519"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0b31c0ac3cfc23944fdc245c983b78e31fcdf8d3","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    :param node: an ironic node object."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    while list_unfinished_jobs(node):"},{"line_number":93,"context_line":"        sleep(wait_clock)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_652af690","line":92,"in_reply_to":"3fa7e38b_adc77e45","updated":"2019-09-23 08:23:53.000000000","message":"definitely a valid concern","commit_id":"b54aaaafff6eca4017b87b84d98d64c064ac0519"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"c3ade3a05b66398a70c3927ff74e893f20d637ce","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        raise exception.DracOperationError(error\u003dexc)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def wait_for_job_completion(node, retries\u003d1200):"},{"line_number":94,"context_line":"    \"\"\"Wait for job to complete"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param node: an ironic node object."}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_51340693","line":93,"updated":"2019-09-26 20:47:15.000000000","message":"The number of retries here seems excessive.  The total time that it would wait is: 1200 retries * 5 seconds per retry / 60 seconds per minute \u003d 100 minutes, or 1 hour + 40 minutes.  I think we want the wait time to be more like 20 minutes, so the number of retries should be around 240.\nAlso, instead of hard coding this, could you add a new configuration parameter so that this value is customizable by the user?\nLike this:\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/modules/drac/management.py#L272\nhttps://github.com/openstack/ironic/blob/master/ironic/conf/drac.py#L25","commit_id":"e9bc655b3870cd284cb55f30ae19ae617665e591"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"0737b8fefbeaa33d224ae054b92ccd732358ac13","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        raise exception.DracOperationError(error\u003dexc)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def wait_for_job_completion(node, retries\u003d1200):"},{"line_number":94,"context_line":"    \"\"\"Wait for job to complete"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param node: an ironic node object."}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_357cc581","line":93,"in_reply_to":"3fa7e38b_51340693","updated":"2019-09-27 14:11:46.000000000","message":"Nice one. Thanks. Done.","commit_id":"e9bc655b3870cd284cb55f30ae19ae617665e591"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"c3ade3a05b66398a70c3927ff74e893f20d637ce","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def wait_for_job_completion(node, retries\u003d1200):"},{"line_number":94,"context_line":"    \"\"\"Wait for job to complete"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param node: an ironic node object."},{"line_number":97,"context_line":"    :retries: no of retries to make conductor wait."},{"line_number":98,"context_line":"    :raises: DracOperationError on an error from python-dracclient."}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_91159ee7","line":95,"updated":"2019-09-26 20:47:15.000000000","message":"Can you add a description here that states that it will wait for up to xxx minutes for the job to complete and then time out?","commit_id":"e9bc655b3870cd284cb55f30ae19ae617665e591"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"0737b8fefbeaa33d224ae054b92ccd732358ac13","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def wait_for_job_completion(node, retries\u003d1200):"},{"line_number":94,"context_line":"    \"\"\"Wait for job to complete"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param node: an ironic node object."},{"line_number":97,"context_line":"    :retries: no of retries to make conductor wait."},{"line_number":98,"context_line":"    :raises: DracOperationError on an error from python-dracclient."}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_b56755e9","line":95,"in_reply_to":"3fa7e38b_91159ee7","updated":"2019-09-27 14:11:46.000000000","message":"Done","commit_id":"e9bc655b3870cd284cb55f30ae19ae617665e591"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"c3ade3a05b66398a70c3927ff74e893f20d637ce","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param node: an ironic node object."},{"line_number":97,"context_line":"    :retries: no of retries to make conductor wait."},{"line_number":98,"context_line":"    :raises: DracOperationError on an error from python-dracclient."},{"line_number":99,"context_line":"    \"\"\""},{"line_number":100,"context_line":"    while retries \u003e 0:"},{"line_number":101,"context_line":"        if not list_unfinished_jobs(node):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_f1265268","line":98,"updated":"2019-09-26 20:47:15.000000000","message":"Probably want to change the above line to state that the exception is thrown on timeout.","commit_id":"e9bc655b3870cd284cb55f30ae19ae617665e591"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"0737b8fefbeaa33d224ae054b92ccd732358ac13","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    :param node: an ironic node object."},{"line_number":97,"context_line":"    :retries: no of retries to make conductor wait."},{"line_number":98,"context_line":"    :raises: DracOperationError on an error from python-dracclient."},{"line_number":99,"context_line":"    \"\"\""},{"line_number":100,"context_line":"    while retries \u003e 0:"},{"line_number":101,"context_line":"        if not list_unfinished_jobs(node):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_15874964","line":98,"in_reply_to":"3fa7e38b_f1265268","updated":"2019-09-27 14:11:46.000000000","message":"Done.","commit_id":"e9bc655b3870cd284cb55f30ae19ae617665e591"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"d94d0239e5e0f225f2cb09d542b47cfdc643ef87","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    if job never complete within given interval of time."},{"line_number":99,"context_line":"    :param node: an ironic node object."},{"line_number":100,"context_line":"    :retries: no of retries to make conductor wait."},{"line_number":101,"context_line":"    :raises: DracOperationError thrown on timeout from python-dracclient."},{"line_number":102,"context_line":"    \"\"\""},{"line_number":103,"context_line":"    while retries \u003e 0:"},{"line_number":104,"context_line":"        if not list_unfinished_jobs(node):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_0b9e4cb8","line":101,"updated":"2019-09-27 19:08:10.000000000","message":"Could you change the text above to \"DracOperationError on exception raised from python-dracclient or a timeout while waiting for job completion.\"?\nSee line 112 below.","commit_id":"63cd8fc878906b3bf3cc90ad89b97633e62f83ad"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"d94d0239e5e0f225f2cb09d542b47cfdc643ef87","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            sleep(WAIT_CLOCK)"},{"line_number":108,"context_line":"        retries -\u003d 1"},{"line_number":109,"context_line":"        if retries \u003d\u003d 0:"},{"line_number":110,"context_line":"            err_msg \u003d \"Timed out waiting for the job to clear\""},{"line_number":111,"context_line":"            LOG.error(err_msg)"},{"line_number":112,"context_line":"            raise exception.DracOperationError(error\u003derr_msg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_abc93859","line":110,"updated":"2019-09-27 19:08:10.000000000","message":"Could you include the ID of the node in the error message?","commit_id":"63cd8fc878906b3bf3cc90ad89b97633e62f83ad"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"d2e91ccf9f578616419379eabb7a12adcb5766ed","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    :param node: an ironic node object."},{"line_number":100,"context_line":"    :retries: no of retries to make conductor wait."},{"line_number":101,"context_line":"    :raises: DracOperationError on exception raised from python-dracclient"},{"line_number":102,"context_line":"             or a timeout while waiting for job completion."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    while retries \u003e 0:"},{"line_number":105,"context_line":"        if not list_unfinished_jobs(node):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_316cc3cc","line":102,"updated":"2019-09-30 11:01:42.000000000","message":"need to correct indentation here for the docs job to pass","commit_id":"587d9540108a487d760908be8836eee06950e998"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"dd0a47f82e671603965b035577b23722b128efac","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    :param node: an ironic node object."},{"line_number":100,"context_line":"    :retries: no of retries to make conductor wait."},{"line_number":101,"context_line":"    :raises: DracOperationError on exception raised from python-dracclient"},{"line_number":102,"context_line":"             or a timeout while waiting for job completion."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    while retries \u003e 0:"},{"line_number":105,"context_line":"        if not list_unfinished_jobs(node):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_91f497f2","line":102,"in_reply_to":"3fa7e38b_316cc3cc","updated":"2019-09-30 11:07:47.000000000","message":"actually the problem is on L100, retries is not defined as param so sphinx errors out","commit_id":"587d9540108a487d760908be8836eee06950e998"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"99c5644f3363d5cc5534c100b52ac0f04757435d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    :param node: an ironic node object."},{"line_number":100,"context_line":"    :param retries: no of retries to make conductor wait."},{"line_number":101,"context_line":"    :raises: DracOperationError on exception raised from python-dracclient"},{"line_number":102,"context_line":"        or a timeout while waiting for job completion."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    while retries \u003e 0:"},{"line_number":105,"context_line":"        if not list_unfinished_jobs(node):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_98eb5711","line":102,"updated":"2019-09-30 14:56:12.000000000","message":"apologies, I didn\u0027t explain myself very well before, you also need to correct the indentation here, needs to be at the same level as the precedent line","commit_id":"5fc0755f327ba88d3c8cd896a3fb5977509abda2"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e499384afab859acc0bcf1f963696b7f443a6c7b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    :param node: an ironic node object."},{"line_number":100,"context_line":"    :param retries: no of retries to make conductor wait."},{"line_number":101,"context_line":"    :raises: DracOperationError on exception raised from python-dracclient"},{"line_number":102,"context_line":"             or a timeout while waiting for job completion."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    while retries \u003e 0:"},{"line_number":105,"context_line":"        if not list_unfinished_jobs(node):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3fa7e38b_b9d5d945","line":102,"updated":"2019-10-02 08:51:32.000000000","message":"to fix the docs test change the indentation here to be the same as the line above","commit_id":"cd4417e09c830ecfebf24e040061968d7ac75932"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"0224a73a7e90a8de25e6e614d06c39c9cfabc80f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    :param node: an ironic node object."},{"line_number":100,"context_line":"    :param retries: no of retries to make conductor wait."},{"line_number":101,"context_line":"    :raises: DracOperationError on exception raised from python-dracclient"},{"line_number":102,"context_line":"             or a timeout while waiting for job completion."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    while retries \u003e 0:"},{"line_number":105,"context_line":"        if not list_unfinished_jobs(node):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3fa7e38b_f3ee05ec","line":102,"in_reply_to":"3fa7e38b_b9d5d945","updated":"2019-10-02 17:13:47.000000000","message":"done thanks for the suggestion.","commit_id":"cd4417e09c830ecfebf24e040061968d7ac75932"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    :raises: DracOperationError on exception raised from python-dracclient"},{"line_number":102,"context_line":"    or a timeout while waiting for job completion."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    while retries \u003e 0:"},{"line_number":105,"context_line":"        if not list_unfinished_jobs(node):"},{"line_number":106,"context_line":"            return"},{"line_number":107,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_335e7912","line":104,"updated":"2019-10-09 09:18:48.000000000","message":"nit: use the \u0027retrying\u0027 library that we already depend on","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    :raises: DracOperationError on exception raised from python-dracclient"},{"line_number":102,"context_line":"    or a timeout while waiting for job completion."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    while retries \u003e 0:"},{"line_number":105,"context_line":"        if not list_unfinished_jobs(node):"},{"line_number":106,"context_line":"            return"},{"line_number":107,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_d38b37bd","line":104,"in_reply_to":"3fa7e38b_335e7912","updated":"2019-10-11 14:31:58.000000000","message":"Done","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            sleep(WAIT_CLOCK)"},{"line_number":109,"context_line":"        retries -\u003d 1"},{"line_number":110,"context_line":"        if retries \u003d\u003d 0:"},{"line_number":111,"context_line":"            err_msg \u003d (\"Timed out waiting for the job to clear on \""},{"line_number":112,"context_line":"                       \"on node {0}\".format(node.uuid))"},{"line_number":113,"context_line":"            LOG.error(err_msg)"},{"line_number":114,"context_line":"            raise exception.DracOperationError(error\u003derr_msg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_d39a85c3","line":111,"updated":"2019-10-09 09:18:48.000000000","message":"This needs i18n: _(\"Timed out...\")","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            sleep(WAIT_CLOCK)"},{"line_number":109,"context_line":"        retries -\u003d 1"},{"line_number":110,"context_line":"        if retries \u003d\u003d 0:"},{"line_number":111,"context_line":"            err_msg \u003d (\"Timed out waiting for the job to clear on \""},{"line_number":112,"context_line":"                       \"on node {0}\".format(node.uuid))"},{"line_number":113,"context_line":"            LOG.error(err_msg)"},{"line_number":114,"context_line":"            raise exception.DracOperationError(error\u003derr_msg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_93513f39","line":111,"in_reply_to":"3fa7e38b_d39a85c3","updated":"2019-10-11 14:31:58.000000000","message":"done","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ea114a45c61fb9e8798677ad06953587650a2e26","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        return"},{"line_number":110,"context_line":"    err_msg \u003d _("},{"line_number":111,"context_line":"        \u0027There are unfinished jobs in the job \u0027"},{"line_number":112,"context_line":"        \u0027queue on node %(node_uuid)r \u0027) % {\u0027node_uuid\u0027: node.uuid}"},{"line_number":113,"context_line":"    LOG.warning(err_msg)"},{"line_number":114,"context_line":"    raise exception.DracOperationError(error\u003derr_msg)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa7e38b_2e5448fe","line":112,"range":{"start_line":112,"start_character":35,"end_line":112,"end_character":36},"updated":"2019-10-17 20:44:35.000000000","message":"This is a string, so s.","commit_id":"8e3f682e29830a9a5a4795b5d775564a21f93733"}],"ironic/drivers/modules/drac/raid.py":[{"author":{"_account_id":8580,"name":"Digambar","email":"digambarpatil15@yahoo.co.in","username":"digambar"},"change_message_id":"d7fc5084bb36aba37a761f8a11a3e0e149f2aadc","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        realtime \u003d controller[\u0027is_reboot_required\u0027] \u003d\u003d optional"},{"line_number":848,"context_line":"        job_id \u003d commit_config(node, raid_controller\u003draid_controller,"},{"line_number":849,"context_line":"                               reboot\u003dcontroller[\u0027is_reboot_required\u0027],"},{"line_number":850,"context_line":"                               realtime\u003drealtime)"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"        LOG.info(\u0027Change has been committed to RAID controller \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b0081880","line":849,"range":{"start_line":849,"start_character":0,"end_line":849,"end_character":31},"updated":"2019-08-30 06:42:04.000000000","message":"I suggest only make changes in existing code like below, it will work \n\nif all_realtime:\n    job_id \u003dcommit_config(node,id_controller\u003draid_controller,\n                                   reboot\u003dFalse,\n                                   realtime\u003drealtime)\nelse:\n   job_id\u003dcommit_config(node,raid_controller\u003draid_controller,\n                                   reboot\u003dnot all_realtime,\n                                   realtime\u003drealtime)","commit_id":"c930d0c97668553fc345b86ff699acf51f7639b4"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"6a618839bc2efaef7aafae869f1c3e4066e14147","unresolved":false,"context_lines":[{"line_number":858,"context_line":"        realtime \u003d controller[\u0027is_reboot_required\u0027] \u003d\u003d optional"},{"line_number":859,"context_line":"        all_realtime \u003d all_realtime and realtime"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        if all_realtime:"},{"line_number":862,"context_line":"            job_id \u003d commit_config(node, raid_controller\u003draid_controller,"},{"line_number":863,"context_line":"                                   reboot\u003dFalse,"},{"line_number":864,"context_line":"                                   realtime\u003drealtime)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_d59d3809","line":861,"updated":"2019-09-04 21:21:28.000000000","message":"I don\u0027t really understand what this change is trying to do.  all_realtime is only valid when all of the controllers have been looped through.  Prior to that, it is True if every controller processed up to this point supports realtime.","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"bed2f6c7c976f54ea543041a5e9924ef182175a9","unresolved":false,"context_lines":[{"line_number":858,"context_line":"        realtime \u003d controller[\u0027is_reboot_required\u0027] \u003d\u003d optional"},{"line_number":859,"context_line":"        all_realtime \u003d all_realtime and realtime"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        if all_realtime:"},{"line_number":862,"context_line":"            job_id \u003d commit_config(node, raid_controller\u003draid_controller,"},{"line_number":863,"context_line":"                                   reboot\u003dFalse,"},{"line_number":864,"context_line":"                                   realtime\u003drealtime)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5faad753_5fbdb366","line":861,"in_reply_to":"7faddb67_d59d3809","updated":"2019-09-06 06:34:58.000000000","message":"Yes i agree with you, we don\u0027t need this if-else condition for creating configuration job prior as we are filtering controllers before `_commit_to_controllers()` call","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":8580,"name":"Digambar","email":"digambarpatil15@yahoo.co.in","username":"digambar"},"change_message_id":"1a4986a4e9f4735b311934c367e83b72ff6760e2","unresolved":false,"context_lines":[{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        if all_realtime:"},{"line_number":862,"context_line":"            job_id \u003d commit_config(node, raid_controller\u003draid_controller,"},{"line_number":863,"context_line":"                                   reboot\u003dFalse,"},{"line_number":864,"context_line":"                                   realtime\u003drealtime)"},{"line_number":865,"context_line":"        else:"},{"line_number":866,"context_line":"            job_id \u003d commit_config(node, raid_controller\u003draid_controller,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_a2db924b","line":863,"range":{"start_line":863,"start_character":0,"end_line":863,"end_character":48},"updated":"2019-09-05 10:17:57.000000000","message":"Remove if-else and implement like below. Hope it help.\n\njob_id \u003d commit_config(node, raid_controller\u003draid_controller,\n                       reboot\u003dFalse if realtime else True,\n                       realtime\u003drealtime)","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"6a618839bc2efaef7aafae869f1c3e4066e14147","unresolved":false,"context_lines":[{"line_number":864,"context_line":"                                   realtime\u003drealtime)"},{"line_number":865,"context_line":"        else:"},{"line_number":866,"context_line":"            job_id \u003d commit_config(node, raid_controller\u003draid_controller,"},{"line_number":867,"context_line":"                                   reboot\u003dnot all_realtime,"},{"line_number":868,"context_line":"                                   realtime\u003drealtime)"},{"line_number":869,"context_line":"        LOG.info(\u0027Change has been committed to RAID controller \u0027"},{"line_number":870,"context_line":"                 \u0027%(controller)s on node %(node)s. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_d5445875","line":867,"updated":"2019-09-04 21:21:28.000000000","message":"I don\u0027t think the above change is right since it will cause a reboot if at least of the controllers processed so far does not support realtime mode.","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"09f24ae873d8ce64790f2cf1263b18ff8ba81d04","unresolved":false,"context_lines":[{"line_number":864,"context_line":"                                   realtime\u003drealtime)"},{"line_number":865,"context_line":"        else:"},{"line_number":866,"context_line":"            job_id \u003d commit_config(node, raid_controller\u003draid_controller,"},{"line_number":867,"context_line":"                                   reboot\u003dnot all_realtime,"},{"line_number":868,"context_line":"                                   realtime\u003drealtime)"},{"line_number":869,"context_line":"        LOG.info(\u0027Change has been committed to RAID controller \u0027"},{"line_number":870,"context_line":"                 \u0027%(controller)s on node %(node)s. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5faad753_40d36639","line":867,"in_reply_to":"7faddb67_d5445875","updated":"2019-09-09 14:56:20.000000000","message":"Yes done","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"6a618839bc2efaef7aafae869f1c3e4066e14147","unresolved":false,"context_lines":[{"line_number":931,"context_line":"        node \u003d task.node"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        logical_disks \u003d node.target_raid_config[\u0027logical_disks\u0027]"},{"line_number":934,"context_line":"        controllers_to_physical_disk_ids \u003d defaultdict(list)"},{"line_number":935,"context_line":"        for logical_disk in logical_disks:"},{"line_number":936,"context_line":"            # Not applicable to JBOD logical disks."},{"line_number":937,"context_line":"            if logical_disk[\u0027raid_level\u0027] \u003d\u003d \u0027JBOD\u0027 or ("}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_4012e4fe","line":934,"updated":"2019-09-04 21:21:28.000000000","message":"I think this entire piece of logic should be moved to immediately after the _filter_logical_disks() call below.  This is because we want this to work when the user hasn\u0027t specified the disks to use and the code selects them automatically.","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"09f24ae873d8ce64790f2cf1263b18ff8ba81d04","unresolved":false,"context_lines":[{"line_number":931,"context_line":"        node \u003d task.node"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        logical_disks \u003d node.target_raid_config[\u0027logical_disks\u0027]"},{"line_number":934,"context_line":"        controllers_to_physical_disk_ids \u003d defaultdict(list)"},{"line_number":935,"context_line":"        for logical_disk in logical_disks:"},{"line_number":936,"context_line":"            # Not applicable to JBOD logical disks."},{"line_number":937,"context_line":"            if logical_disk[\u0027raid_level\u0027] \u003d\u003d \u0027JBOD\u0027 or ("}],"source_content_type":"text/x-python","patch_set":5,"id":"5faad753_20e2ea04","line":934,"in_reply_to":"7faddb67_4012e4fe","updated":"2019-09-09 14:56:20.000000000","message":"Yes you are absolutely right. Done","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"6a618839bc2efaef7aafae869f1c3e4066e14147","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        _change_physical_disk_conversion("},{"line_number":951,"context_line":"            node, raid, controllers_to_physical_disk_ids)"},{"line_number":952,"context_line":"        list_unfinished_jobs \u003d drac_job.list_unfinished_jobs(node)"},{"line_number":953,"context_line":"        if list_unfinished_jobs:"},{"line_number":954,"context_line":"            drac_job.wait_for_job_completion(node)"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        for disk in logical_disks:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_a06b98b6","line":953,"updated":"2019-09-04 21:21:28.000000000","message":"Couldn\u0027t we just eliminate the 2 lines above and just call into wait_for_job_completion()?","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"09f24ae873d8ce64790f2cf1263b18ff8ba81d04","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        _change_physical_disk_conversion("},{"line_number":951,"context_line":"            node, raid, controllers_to_physical_disk_ids)"},{"line_number":952,"context_line":"        list_unfinished_jobs \u003d drac_job.list_unfinished_jobs(node)"},{"line_number":953,"context_line":"        if list_unfinished_jobs:"},{"line_number":954,"context_line":"            drac_job.wait_for_job_completion(node)"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        for disk in logical_disks:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5faad753_e0e37204","line":953,"in_reply_to":"7faddb67_a06b98b6","updated":"2019-09-09 14:56:20.000000000","message":"Done","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"8238d02181f9528f9659eddd47fdbb28e275adab","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"                    \"is_reboot_required\"]"},{"line_number":1020,"context_line":"                controllers.append(controller)"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        controllers \u003d _filter_controllers(controllers)"},{"line_number":1023,"context_line":"        return _commit_to_controllers(node, controllers,"},{"line_number":1024,"context_line":"                                      substep\u003d\"delete_foreign_config\")"},{"line_number":1025,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_4ca7c8a9","line":1022,"updated":"2019-08-30 13:43:24.000000000","message":"Hey Guys,\nMain reason to add this ``_filter_controllers()`` call is because ironic should create configuration job for the controller which does not support ``realtime``.\n(NOTE:And it is time efficient which costs time complexity O(n))\n\nAlso another approach i can suggest here is below:\n``controllers \u003d sorted(controllers, key \u003d lambda x : x[\u0027is_reboot_required\u0027] !\u003d \u0027true\u0027)``\n\nLet me know your thoughts on this ...Thanks","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"bed2f6c7c976f54ea543041a5e9924ef182175a9","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"                    \"is_reboot_required\"]"},{"line_number":1020,"context_line":"                controllers.append(controller)"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        controllers \u003d _filter_controllers(controllers)"},{"line_number":1023,"context_line":"        return _commit_to_controllers(node, controllers,"},{"line_number":1024,"context_line":"                                      substep\u003d\"delete_foreign_config\")"},{"line_number":1025,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5faad753_9faa4b17","line":1022,"in_reply_to":"7faddb67_40e74410","updated":"2019-09-06 06:34:58.000000000","message":"Yes Chris, i will add separate patch for this bug.","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"6a618839bc2efaef7aafae869f1c3e4066e14147","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"                    \"is_reboot_required\"]"},{"line_number":1020,"context_line":"                controllers.append(controller)"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        controllers \u003d _filter_controllers(controllers)"},{"line_number":1023,"context_line":"        return _commit_to_controllers(node, controllers,"},{"line_number":1024,"context_line":"                                      substep\u003d\"delete_foreign_config\")"},{"line_number":1025,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_40e74410","line":1022,"in_reply_to":"7faddb67_4ca7c8a9","updated":"2019-09-04 21:21:28.000000000","message":"Hey Rachit, is this to fix the issue where realtime jobs were completing before all of the jobs were added to driver_internal_info?  If so, could you create a separate patch for this bug?","commit_id":"cbba765f2bafd22f82fd956122fddac335775768"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"dc156c2e1fd8bcfa3fc52c581a9fd4edfd7cfc5c","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    :param node: an ironic node object."},{"line_number":303,"context_line":"    :param mode: enumeration that indicates the mode"},{"line_number":304,"context_line":"                 to change the disks to."},{"line_number":305,"context_line":"    :return: a dictionary containing:"},{"line_number":306,"context_line":"             - conversion_results, a dictionary that maps controller ids"},{"line_number":307,"context_line":"             to the conversion results for that controller."},{"line_number":308,"context_line":"             The conversion results are a dict that contains:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_1cc6f249","line":305,"updated":"2019-09-12 07:19:41.000000000","message":"might be worth to add a param entry for controllers_to_physical_disk_ids","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"315769c7eb14957c6be837b21d260330de03a704","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    :param node: an ironic node object."},{"line_number":303,"context_line":"    :param mode: enumeration that indicates the mode"},{"line_number":304,"context_line":"                 to change the disks to."},{"line_number":305,"context_line":"    :return: a dictionary containing:"},{"line_number":306,"context_line":"             - conversion_results, a dictionary that maps controller ids"},{"line_number":307,"context_line":"             to the conversion results for that controller."},{"line_number":308,"context_line":"             The conversion results are a dict that contains:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_6ce4f8e1","line":305,"in_reply_to":"5faad753_1cc6f249","updated":"2019-09-13 08:31:13.000000000","message":"Done","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"dc156c2e1fd8bcfa3fc52c581a9fd4edfd7cfc5c","unresolved":false,"context_lines":[{"line_number":316,"context_line":"             exception message does not contain NOT_SUPPORTED_MSG constant."},{"line_number":317,"context_line":"    \"\"\""},{"line_number":318,"context_line":"    try:"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        drac_job.validate_job_queue(node)"},{"line_number":321,"context_line":"        client \u003d drac_common.get_drac_client(node)"},{"line_number":322,"context_line":"        return client.change_physical_disk_state("}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_fc2e76f8","line":319,"updated":"2019-09-12 07:19:41.000000000","message":"nit: remove blank line","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"315769c7eb14957c6be837b21d260330de03a704","unresolved":false,"context_lines":[{"line_number":316,"context_line":"             exception message does not contain NOT_SUPPORTED_MSG constant."},{"line_number":317,"context_line":"    \"\"\""},{"line_number":318,"context_line":"    try:"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        drac_job.validate_job_queue(node)"},{"line_number":321,"context_line":"        client \u003d drac_common.get_drac_client(node)"},{"line_number":322,"context_line":"        return client.change_physical_disk_state("}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_0ce544dc","line":319,"in_reply_to":"5faad753_fc2e76f8","updated":"2019-09-13 08:31:13.000000000","message":"Done","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"dc156c2e1fd8bcfa3fc52c581a9fd4edfd7cfc5c","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            mode, controllers_to_physical_disk_ids)"},{"line_number":324,"context_line":"    except drac_exceptions.BaseClientException as exc:"},{"line_number":325,"context_line":"        LOG.error(\u0027DRAC driver failed to change physical drives \u0027"},{"line_number":326,"context_line":"                  \u0027in %(mode)s mode \u0027"},{"line_number":327,"context_line":"                  \u0027for node %(node_uuid)s. \u0027"},{"line_number":328,"context_line":"                  \u0027Reason: %(error)s.\u0027,"},{"line_number":329,"context_line":"                  {\u0027mode\u0027: mode,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_dc14daa2","line":326,"updated":"2019-09-12 07:19:41.000000000","message":"lots of unneeded line splits here, maybe we can reduce to fewer lines ?","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"315769c7eb14957c6be837b21d260330de03a704","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            mode, controllers_to_physical_disk_ids)"},{"line_number":324,"context_line":"    except drac_exceptions.BaseClientException as exc:"},{"line_number":325,"context_line":"        LOG.error(\u0027DRAC driver failed to change physical drives \u0027"},{"line_number":326,"context_line":"                  \u0027in %(mode)s mode \u0027"},{"line_number":327,"context_line":"                  \u0027for node %(node_uuid)s. \u0027"},{"line_number":328,"context_line":"                  \u0027Reason: %(error)s.\u0027,"},{"line_number":329,"context_line":"                  {\u0027mode\u0027: mode,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_2cea80ab","line":326,"in_reply_to":"5faad753_dc14daa2","updated":"2019-09-13 08:31:13.000000000","message":"Done","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"0fbf364ec5339404f5d711a59b88afd95c613257","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    :param node: an ironic node object."},{"line_number":369,"context_line":"    :param mode: enumeration that indicates the mode"},{"line_number":370,"context_line":"                     to change the disks to."},{"line_number":371,"context_line":"    :returns: states.CLEANWAIT if deletion is in progress asynchronously"},{"line_number":372,"context_line":"              or None if it is completed."},{"line_number":373,"context_line":"    :raises: DRACOperationFailed on error reported back by the DRAC and the"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_ee4d6172","line":370,"updated":"2019-09-11 21:34:47.000000000","message":"Can you add a :param for controllers_to_physical_disk_ids here?","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"315769c7eb14957c6be837b21d260330de03a704","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    :param node: an ironic node object."},{"line_number":369,"context_line":"    :param mode: enumeration that indicates the mode"},{"line_number":370,"context_line":"                     to change the disks to."},{"line_number":371,"context_line":"    :returns: states.CLEANWAIT if deletion is in progress asynchronously"},{"line_number":372,"context_line":"              or None if it is completed."},{"line_number":373,"context_line":"    :raises: DRACOperationFailed on error reported back by the DRAC and the"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_ccd2cc00","line":370,"in_reply_to":"5faad753_ee4d6172","updated":"2019-09-13 08:31:13.000000000","message":"Done","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"dc156c2e1fd8bcfa3fc52c581a9fd4edfd7cfc5c","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                     to change the disks to."},{"line_number":371,"context_line":"    :returns: states.CLEANWAIT if deletion is in progress asynchronously"},{"line_number":372,"context_line":"              or None if it is completed."},{"line_number":373,"context_line":"    :raises: DRACOperationFailed on error reported back by the DRAC and the"},{"line_number":374,"context_line":"             exception message does not contain NOT_SUPPORTED_MSG constant."},{"line_number":375,"context_line":"    \"\"\""},{"line_number":376,"context_line":"    change_disk_state \u003d change_physical_disk_state("}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_7c236606","line":373,"updated":"2019-09-12 07:19:41.000000000","message":"where does it raise this ?","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"315769c7eb14957c6be837b21d260330de03a704","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                     to change the disks to."},{"line_number":371,"context_line":"    :returns: states.CLEANWAIT if deletion is in progress asynchronously"},{"line_number":372,"context_line":"              or None if it is completed."},{"line_number":373,"context_line":"    :raises: DRACOperationFailed on error reported back by the DRAC and the"},{"line_number":374,"context_line":"             exception message does not contain NOT_SUPPORTED_MSG constant."},{"line_number":375,"context_line":"    \"\"\""},{"line_number":376,"context_line":"    change_disk_state \u003d change_physical_disk_state("}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_8cd8541e","line":373,"in_reply_to":"5faad753_7c236606","updated":"2019-09-13 08:31:13.000000000","message":"Yes removed.","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"0fbf364ec5339404f5d711a59b88afd95c613257","unresolved":false,"context_lines":[{"line_number":946,"context_line":"        for logical_disk in logical_disks_to_create:"},{"line_number":947,"context_line":"            # Not applicable to JBOD logical disks."},{"line_number":948,"context_line":"            if logical_disk[\u0027raid_level\u0027] \u003d\u003d \u0027JBOD\u0027 or ("},{"line_number":949,"context_line":"                    \u0027physical_disks\u0027 not in logical_disk or"},{"line_number":950,"context_line":"                    \u0027controller\u0027 not in logical_disk):"},{"line_number":951,"context_line":"                continue"},{"line_number":952,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_d317f250","line":949,"updated":"2019-09-11 21:34:47.000000000","message":"I don\u0027t think we need to check to see if physical_disks is in logical_disk or if controller is in logical disk since these will always be put there by _find_configuration().","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"315769c7eb14957c6be837b21d260330de03a704","unresolved":false,"context_lines":[{"line_number":946,"context_line":"        for logical_disk in logical_disks_to_create:"},{"line_number":947,"context_line":"            # Not applicable to JBOD logical disks."},{"line_number":948,"context_line":"            if logical_disk[\u0027raid_level\u0027] \u003d\u003d \u0027JBOD\u0027 or ("},{"line_number":949,"context_line":"                    \u0027physical_disks\u0027 not in logical_disk or"},{"line_number":950,"context_line":"                    \u0027controller\u0027 not in logical_disk):"},{"line_number":951,"context_line":"                continue"},{"line_number":952,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_4c081c91","line":949,"in_reply_to":"5faad753_d317f250","updated":"2019-09-13 08:31:13.000000000","message":"Done","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            mode, controllers_to_physical_disk_ids)"},{"line_number":325,"context_line":"    except drac_exceptions.BaseClientException as exc:"},{"line_number":326,"context_line":"        LOG.error(\u0027DRAC driver failed to change physical drives \u0027"},{"line_number":327,"context_line":"                  \u0027in %(mode)s mode for node  %(node_uuid)s. \u0027"},{"line_number":328,"context_line":"                  \u0027Reason: %(error)s.\u0027,"},{"line_number":329,"context_line":"                  {\u0027mode\u0027: mode, \u0027node_uuid\u0027: node.uuid, \u0027error\u0027: exc})"},{"line_number":330,"context_line":"        raise exception.DracOperationError(error\u003dexc)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_ae8ad766","line":327,"updated":"2019-09-13 21:04:54.000000000","message":"nit: can you remove the extra space after \"node\" in the above line?","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            mode, controllers_to_physical_disk_ids)"},{"line_number":325,"context_line":"    except drac_exceptions.BaseClientException as exc:"},{"line_number":326,"context_line":"        LOG.error(\u0027DRAC driver failed to change physical drives \u0027"},{"line_number":327,"context_line":"                  \u0027in %(mode)s mode for node  %(node_uuid)s. \u0027"},{"line_number":328,"context_line":"                  \u0027Reason: %(error)s.\u0027,"},{"line_number":329,"context_line":"                  {\u0027mode\u0027: mode, \u0027node_uuid\u0027: node.uuid, \u0027error\u0027: exc})"},{"line_number":330,"context_line":"        raise exception.DracOperationError(error\u003dexc)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_27a9d4de","line":327,"in_reply_to":"5faad753_ae8ad766","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                    logical_disk[\u0027controller\u0027]].append("},{"line_number":952,"context_line":"                    physical_disk_name)"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"        LOG.info("},{"line_number":955,"context_line":"            \"Converting physical disks configured to back RAID \""},{"line_number":956,"context_line":"            \"logical disks to RAID mode\")"},{"line_number":957,"context_line":"        raid \u003d drac_constants.RaidStatus.raid"}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_256da5cb","line":954,"updated":"2019-09-13 21:04:54.000000000","message":"There is a bug here.  If logical_disks_to_create is empty, controllers_to_physical_disk_ids will also be empty, which is correct, but _change_physical_disk_conversion() will be called anyway.  This will result in drac_client.change_physical_disk_state() being called with an empty controllers_to_physical_disk_ids.  That method assumes that if you\u0027re calling it and not specifying what disks you want converted then you want them all converted.  The end result will be that all drives connected to all RAID controllers will be converted to RAID mode when no virtual disks are being created.  To fix this, I think we need to put lines 954-962 inside an \"if\" statement that will only execute this code if logical_disks_to_create is not empty.  We also need to fix the corresponding test cases.","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                    logical_disk[\u0027controller\u0027]].append("},{"line_number":952,"context_line":"                    physical_disk_name)"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"        LOG.info("},{"line_number":955,"context_line":"            \"Converting physical disks configured to back RAID \""},{"line_number":956,"context_line":"            \"logical disks to RAID mode\")"},{"line_number":957,"context_line":"        raid \u003d drac_constants.RaidStatus.raid"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_e7aadcd0","line":954,"in_reply_to":"5faad753_256da5cb","updated":"2019-09-16 15:12:23.000000000","message":"Yes. Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"698f3bb1afe0b2def7119da61e7d83cbf88a622d","unresolved":false,"context_lines":[{"line_number":314,"context_line":"             - The is_reboot_required key with a RebootRequired"},{"line_number":315,"context_line":"             enumerated value indicating whether the server must be"},{"line_number":316,"context_line":"             rebooted to complete disk conversion."},{"line_number":317,"context_line":"    :raises: DRACOperationFailed on error reported back by the DRAC and the"},{"line_number":318,"context_line":"             exception message does not contain NOT_SUPPORTED_MSG constant."},{"line_number":319,"context_line":"    \"\"\""},{"line_number":320,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_df0195b1","line":317,"range":{"start_line":317,"start_character":13,"end_line":317,"end_character":32},"updated":"2019-09-17 12:45:18.000000000","message":"nit: DracOperationError","commit_id":"17192aedd0915c9f777521e086567fd208dbf4c8"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"c3ade3a05b66398a70c3927ff74e893f20d637ce","unresolved":false,"context_lines":[{"line_number":330,"context_line":"             enumerated value indicating whether the server must be"},{"line_number":331,"context_line":"             rebooted to complete disk conversion."},{"line_number":332,"context_line":"    :raises: DRACOperationFailed on error reported back by the DRAC and the"},{"line_number":333,"context_line":"             exception message does not contain NOT_SUPPORTED_MSG constant."},{"line_number":334,"context_line":"    \"\"\""},{"line_number":335,"context_line":"    try:"},{"line_number":336,"context_line":"        drac_job.validate_job_queue(node)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_d15d5647","line":333,"updated":"2019-09-26 20:47:15.000000000","message":"Can you add a :raises: statement for DracOperationError which is raised on line 345 below?","commit_id":"e9bc655b3870cd284cb55f30ae19ae617665e591"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"0737b8fefbeaa33d224ae054b92ccd732358ac13","unresolved":false,"context_lines":[{"line_number":330,"context_line":"             enumerated value indicating whether the server must be"},{"line_number":331,"context_line":"             rebooted to complete disk conversion."},{"line_number":332,"context_line":"    :raises: DRACOperationFailed on error reported back by the DRAC and the"},{"line_number":333,"context_line":"             exception message does not contain NOT_SUPPORTED_MSG constant."},{"line_number":334,"context_line":"    \"\"\""},{"line_number":335,"context_line":"    try:"},{"line_number":336,"context_line":"        drac_job.validate_job_queue(node)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_959a59b6","line":333,"in_reply_to":"3fa7e38b_d15d5647","updated":"2019-09-27 14:11:46.000000000","message":"Done.","commit_id":"e9bc655b3870cd284cb55f30ae19ae617665e591"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":312,"context_line":""},{"line_number":313,"context_line":"def change_physical_disk_state(node, mode\u003dNone,"},{"line_number":314,"context_line":"                               controllers_to_physical_disk_ids\u003dNone):"},{"line_number":315,"context_line":"    \"\"\"Convert disks RAID status"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    :param node: an ironic node object."},{"line_number":318,"context_line":"    :param mode: enumeration that indicates the mode"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_5340d535","line":315,"updated":"2019-10-09 09:18:48.000000000","message":"nit: any details would be helpful","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":312,"context_line":""},{"line_number":313,"context_line":"def change_physical_disk_state(node, mode\u003dNone,"},{"line_number":314,"context_line":"                               controllers_to_physical_disk_ids\u003dNone):"},{"line_number":315,"context_line":"    \"\"\"Convert disks RAID status"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    :param node: an ironic node object."},{"line_number":318,"context_line":"    :param mode: enumeration that indicates the mode"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_58068688","line":315,"in_reply_to":"3fa7e38b_5340d535","updated":"2019-10-11 14:31:58.000000000","message":"done","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":315,"context_line":"    \"\"\"Convert disks RAID status"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    :param node: an ironic node object."},{"line_number":318,"context_line":"    :param mode: enumeration that indicates the mode"},{"line_number":319,"context_line":"                 to change the disks to."},{"line_number":320,"context_line":"    :param controllers_to_physical_disk_ids: Dictionary of controllers and"},{"line_number":321,"context_line":"           corresponding disk ids to convert to the requested mode."}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_733b91c7","line":318,"updated":"2019-10-09 09:18:48.000000000","message":"Is it really a enumeration or one value?","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":315,"context_line":"    \"\"\"Convert disks RAID status"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    :param node: an ironic node object."},{"line_number":318,"context_line":"    :param mode: enumeration that indicates the mode"},{"line_number":319,"context_line":"                 to change the disks to."},{"line_number":320,"context_line":"    :param controllers_to_physical_disk_ids: Dictionary of controllers and"},{"line_number":321,"context_line":"           corresponding disk ids to convert to the requested mode."}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_1831ee59","line":318,"in_reply_to":"3fa7e38b_733b91c7","updated":"2019-10-11 14:31:58.000000000","message":"Its a value. changed","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                 to change the disks to."},{"line_number":320,"context_line":"    :param controllers_to_physical_disk_ids: Dictionary of controllers and"},{"line_number":321,"context_line":"           corresponding disk ids to convert to the requested mode."},{"line_number":322,"context_line":"    :return: a dictionary containing:"},{"line_number":323,"context_line":"             - conversion_results, a dictionary that maps controller ids"},{"line_number":324,"context_line":"             to the conversion results for that controller."},{"line_number":325,"context_line":"             The conversion results are a dict that contains:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_134a5d54","line":322,"updated":"2019-10-09 09:18:48.000000000","message":"This requires https://opendev.org/openstack/python-dracclient/commit/ff312640d8af2b2b18ab08bf725a4ee8f2e99bcf, do you need to bump driver-requirements to 3.1.0?","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                 to change the disks to."},{"line_number":320,"context_line":"    :param controllers_to_physical_disk_ids: Dictionary of controllers and"},{"line_number":321,"context_line":"           corresponding disk ids to convert to the requested mode."},{"line_number":322,"context_line":"    :return: a dictionary containing:"},{"line_number":323,"context_line":"             - conversion_results, a dictionary that maps controller ids"},{"line_number":324,"context_line":"             to the conversion results for that controller."},{"line_number":325,"context_line":"             The conversion results are a dict that contains:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_98e07e99","line":322,"in_reply_to":"3fa7e38b_134a5d54","updated":"2019-10-11 14:31:58.000000000","message":"done.","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            mode, controllers_to_physical_disk_ids)"},{"line_number":339,"context_line":"    except drac_exceptions.BaseClientException as exc:"},{"line_number":340,"context_line":"        LOG.error(\u0027DRAC driver failed to change physical drives \u0027"},{"line_number":341,"context_line":"                  \u0027in %(mode)s mode for node %(node_uuid)s. \u0027"},{"line_number":342,"context_line":"                  \u0027Reason: %(error)s.\u0027,"},{"line_number":343,"context_line":"                  {\u0027mode\u0027: mode, \u0027node_uuid\u0027: node.uuid, \u0027error\u0027: exc})"},{"line_number":344,"context_line":"        raise exception.DracOperationError(error\u003dexc)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_33451944","line":341,"updated":"2019-10-09 09:18:48.000000000","message":"nit: s/in/to/ ?","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            mode, controllers_to_physical_disk_ids)"},{"line_number":339,"context_line":"    except drac_exceptions.BaseClientException as exc:"},{"line_number":340,"context_line":"        LOG.error(\u0027DRAC driver failed to change physical drives \u0027"},{"line_number":341,"context_line":"                  \u0027in %(mode)s mode for node %(node_uuid)s. \u0027"},{"line_number":342,"context_line":"                  \u0027Reason: %(error)s.\u0027,"},{"line_number":343,"context_line":"                  {\u0027mode\u0027: mode, \u0027node_uuid\u0027: node.uuid, \u0027error\u0027: exc})"},{"line_number":344,"context_line":"        raise exception.DracOperationError(error\u003dexc)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_189b2e17","line":341,"in_reply_to":"3fa7e38b_33451944","updated":"2019-10-11 14:31:58.000000000","message":"done","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        raise exception.DracOperationError(error\u003dexc)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"def _change_physical_disk_conversion(node, mode\u003dNone,"},{"line_number":377,"context_line":"                                     controllers_to_physical_disk_ids\u003dNone):"},{"line_number":378,"context_line":"    \"\"\"physical drives conversion from raid to jbod or vice-versa."},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_d375a599","line":376,"updated":"2019-10-09 09:18:48.000000000","message":"nit: _change_physical_disk_mode or _convert_physical_disk","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        raise exception.DracOperationError(error\u003dexc)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"def _change_physical_disk_conversion(node, mode\u003dNone,"},{"line_number":377,"context_line":"                                     controllers_to_physical_disk_ids\u003dNone):"},{"line_number":378,"context_line":"    \"\"\"physical drives conversion from raid to jbod or vice-versa."},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_386e2a00","line":376,"in_reply_to":"3fa7e38b_d375a599","updated":"2019-10-11 14:31:58.000000000","message":"done","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"def _change_physical_disk_conversion(node, mode\u003dNone,"},{"line_number":377,"context_line":"                                     controllers_to_physical_disk_ids\u003dNone):"},{"line_number":378,"context_line":"    \"\"\"physical drives conversion from raid to jbod or vice-versa."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    :param node: an ironic node object."},{"line_number":381,"context_line":"    :param mode: enumeration that indicates the mode"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_f378e18f","line":378,"updated":"2019-10-09 09:18:48.000000000","message":"nit: start with upper case letter. also RAID, JBOD.","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"def _change_physical_disk_conversion(node, mode\u003dNone,"},{"line_number":377,"context_line":"                                     controllers_to_physical_disk_ids\u003dNone):"},{"line_number":378,"context_line":"    \"\"\"physical drives conversion from raid to jbod or vice-versa."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    :param node: an ironic node object."},{"line_number":381,"context_line":"    :param mode: enumeration that indicates the mode"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_982abe8e","line":378,"in_reply_to":"3fa7e38b_f378e18f","updated":"2019-10-11 14:31:58.000000000","message":"done","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    \"\"\"physical drives conversion from raid to jbod or vice-versa."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    :param node: an ironic node object."},{"line_number":381,"context_line":"    :param mode: enumeration that indicates the mode"},{"line_number":382,"context_line":"                     to change the disks to."},{"line_number":383,"context_line":"    :param controllers_to_physical_disk_ids: Dictionary of controllers and"},{"line_number":384,"context_line":"           corresponding disk ids to convert to the requested mode."}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_936f2dc4","line":381,"updated":"2019-10-09 09:18:48.000000000","message":"ditto, it\u0027s not a enumeration, it\u0027s the mode itself, right?","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    \"\"\"physical drives conversion from raid to jbod or vice-versa."},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    :param node: an ironic node object."},{"line_number":381,"context_line":"    :param mode: enumeration that indicates the mode"},{"line_number":382,"context_line":"                     to change the disks to."},{"line_number":383,"context_line":"    :param controllers_to_physical_disk_ids: Dictionary of controllers and"},{"line_number":384,"context_line":"           corresponding disk ids to convert to the requested mode."}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_78510236","line":381,"in_reply_to":"3fa7e38b_936f2dc4","updated":"2019-10-11 14:31:58.000000000","message":"yes","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        if result[\u0027is_commit_required\u0027]:"},{"line_number":395,"context_line":"            controller \u003d {\u0027raid_controller\u0027: controller_id,"},{"line_number":396,"context_line":"                          \u0027is_reboot_required\u0027: result[\u0027is_reboot_required\u0027],"},{"line_number":397,"context_line":"                          \u0027is_commit_required\u0027: result[\u0027is_commit_required\u0027]}"},{"line_number":398,"context_line":"            controllers.append(controller)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    return _commit_to_controllers("}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_b37269ac","line":397,"updated":"2019-10-09 09:18:48.000000000","message":"nit: this is known to be True (you\u0027ve checked it)","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        if result[\u0027is_commit_required\u0027]:"},{"line_number":395,"context_line":"            controller \u003d {\u0027raid_controller\u0027: controller_id,"},{"line_number":396,"context_line":"                          \u0027is_reboot_required\u0027: result[\u0027is_reboot_required\u0027],"},{"line_number":397,"context_line":"                          \u0027is_commit_required\u0027: result[\u0027is_commit_required\u0027]}"},{"line_number":398,"context_line":"            controllers.append(controller)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    return _commit_to_controllers("}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_b39a3b6c","line":397,"in_reply_to":"3fa7e38b_b37269ac","updated":"2019-10-11 14:31:58.000000000","message":"yes. removed if condition which checks \u0027is_commit_required\u0027 key.","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"        if logical_disks_to_create:"},{"line_number":1031,"context_line":"            LOG.info("},{"line_number":1032,"context_line":"                \"Converting physical disks configured to back RAID \""},{"line_number":1033,"context_line":"                \"logical disks to RAID mode\")"},{"line_number":1034,"context_line":"            raid \u003d drac_constants.RaidStatus.raid"},{"line_number":1035,"context_line":"            _change_physical_disk_conversion("},{"line_number":1036,"context_line":"                node, raid, controllers_to_physical_disk_ids)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_5369b5bb","line":1033,"updated":"2019-10-09 09:18:48.000000000","message":"s/info/debug/ mention node UUID","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"        if logical_disks_to_create:"},{"line_number":1031,"context_line":"            LOG.info("},{"line_number":1032,"context_line":"                \"Converting physical disks configured to back RAID \""},{"line_number":1033,"context_line":"                \"logical disks to RAID mode\")"},{"line_number":1034,"context_line":"            raid \u003d drac_constants.RaidStatus.raid"},{"line_number":1035,"context_line":"            _change_physical_disk_conversion("},{"line_number":1036,"context_line":"                node, raid, controllers_to_physical_disk_ids)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_33d96b55","line":1033,"in_reply_to":"3fa7e38b_5369b5bb","updated":"2019-10-11 14:31:58.000000000","message":"done","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":1035,"context_line":"            _change_physical_disk_conversion("},{"line_number":1036,"context_line":"                node, raid, controllers_to_physical_disk_ids)"},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"            LOG.info(\"Waiting for physical disk conversion to complete\")"},{"line_number":1039,"context_line":"            drac_job.wait_for_job_completion(node)"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"        controllers \u003d list()"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_7364f1e5","line":1038,"updated":"2019-10-09 09:18:48.000000000","message":"s/info/debug/ and mention node UUID","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":1035,"context_line":"            _change_physical_disk_conversion("},{"line_number":1036,"context_line":"                node, raid, controllers_to_physical_disk_ids)"},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"            LOG.info(\"Waiting for physical disk conversion to complete\")"},{"line_number":1039,"context_line":"            drac_job.wait_for_job_completion(node)"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"        controllers \u003d list()"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_f3e67316","line":1038,"in_reply_to":"3fa7e38b_7364f1e5","updated":"2019-10-11 14:31:58.000000000","message":"Done","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"            LOG.info(\"Waiting for physical disk conversion to complete\")"},{"line_number":1039,"context_line":"            drac_job.wait_for_job_completion(node)"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"        controllers \u003d list()"},{"line_number":1042,"context_line":"        for logical_disk in logical_disks_to_create:"},{"line_number":1043,"context_line":"            controller \u003d dict()"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_13633dde","line":1040,"updated":"2019-10-09 09:18:48.000000000","message":"you can insert an INFO level logging after the job is completed (with some details, at least node UUID)","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"9468204101c2b718ab780fd42b6107dca5db2eb5","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"            LOG.info(\"Waiting for physical disk conversion to complete\")"},{"line_number":1039,"context_line":"            drac_job.wait_for_job_completion(node)"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"        controllers \u003d list()"},{"line_number":1042,"context_line":"        for logical_disk in logical_disks_to_create:"},{"line_number":1043,"context_line":"            controller \u003d dict()"}],"source_content_type":"text/x-python","patch_set":21,"id":"3fa7e38b_d3e9f7e2","line":1040,"in_reply_to":"3fa7e38b_13633dde","updated":"2019-10-11 14:31:58.000000000","message":"done","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"07a9568a0309eeb901e12b100b792e8f2f404058","unresolved":false,"context_lines":[{"line_number":898,"context_line":"    else:"},{"line_number":899,"context_line":"        for controller in controllers:"},{"line_number":900,"context_line":"            mix_controller \u003d controller[\u0027raid_controller\u0027]"},{"line_number":901,"context_line":"            reboot \u003d True if controller \u003d\u003d controllers[-1] else False"},{"line_number":902,"context_line":"            job_details \u003d _create_config_job("},{"line_number":903,"context_line":"                node, controller\u003dmix_controller,"},{"line_number":904,"context_line":"                reboot\u003dreboot, realtime\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_71e47be0","line":901,"range":{"start_line":901,"start_character":0,"end_line":901,"end_character":69},"updated":"2019-10-16 13:46:03.000000000","message":"nit:\n\n reboot \u003d (controller \u003d\u003d controllers[-1])","commit_id":"59c8e7d84348c99bde529601fee79e4624adfa9f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"486f49c2d7fc18ea690c3a2b97240a60858e5840","unresolved":false,"context_lines":[{"line_number":898,"context_line":"    else:"},{"line_number":899,"context_line":"        for controller in controllers:"},{"line_number":900,"context_line":"            mix_controller \u003d controller[\u0027raid_controller\u0027]"},{"line_number":901,"context_line":"            reboot \u003d True if controller \u003d\u003d controllers[-1] else False"},{"line_number":902,"context_line":"            job_details \u003d _create_config_job("},{"line_number":903,"context_line":"                node, controller\u003dmix_controller,"},{"line_number":904,"context_line":"                reboot\u003dreboot, realtime\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_18de876c","line":901,"range":{"start_line":901,"start_character":0,"end_line":901,"end_character":69},"in_reply_to":"3fa7e38b_71e47be0","updated":"2019-10-16 16:33:21.000000000","message":"Done","commit_id":"59c8e7d84348c99bde529601fee79e4624adfa9f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"07a9568a0309eeb901e12b100b792e8f2f404058","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"        if logical_disks_to_create:"},{"line_number":1050,"context_line":"            LOG.debug("},{"line_number":1051,"context_line":"                \"Converting physical disks configured to back RAID \""},{"line_number":1052,"context_line":"                \"logical disks to RAID mode for node {}\".format(node.uuid))"},{"line_number":1053,"context_line":"            raid \u003d drac_constants.RaidStatus.raid"},{"line_number":1054,"context_line":"            _change_physical_disk_mode("},{"line_number":1055,"context_line":"                node, raid, controllers_to_physical_disk_ids)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_d10a0f88","line":1052,"updated":"2019-10-16 13:46:03.000000000","message":"nit: we usually use %s formatting rather than {}, because in case of logging it can be lazy. I.e. in\n\n LOG.debug(\"... %s ...\", node.uuid)\n\nstring formatting will only be done if DEBUG is enabled.","commit_id":"59c8e7d84348c99bde529601fee79e4624adfa9f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"486f49c2d7fc18ea690c3a2b97240a60858e5840","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"        if logical_disks_to_create:"},{"line_number":1050,"context_line":"            LOG.debug("},{"line_number":1051,"context_line":"                \"Converting physical disks configured to back RAID \""},{"line_number":1052,"context_line":"                \"logical disks to RAID mode for node {}\".format(node.uuid))"},{"line_number":1053,"context_line":"            raid \u003d drac_constants.RaidStatus.raid"},{"line_number":1054,"context_line":"            _change_physical_disk_mode("},{"line_number":1055,"context_line":"                node, raid, controllers_to_physical_disk_ids)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_38d90382","line":1052,"in_reply_to":"3fa7e38b_d10a0f88","updated":"2019-10-16 16:33:21.000000000","message":"Done","commit_id":"59c8e7d84348c99bde529601fee79e4624adfa9f"}],"ironic/tests/unit/drivers/modules/drac/test_raid.py":[{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"0fbf364ec5339404f5d711a59b88afd95c613257","unresolved":false,"context_lines":[{"line_number":1639,"context_line":"                       autospec\u003dTrue)"},{"line_number":1640,"context_line":"    @mock.patch.object(drac_raid, \u0027change_physical_disk_state\u0027, spec_set\u003dTrue,"},{"line_number":1641,"context_line":"                       autospec\u003dTrue)"},{"line_number":1642,"context_line":"    @mock.patch.object(drac_job, \u0027list_unfinished_jobs\u0027, spec_set\u003dTrue,"},{"line_number":1643,"context_line":"                       autospec\u003dTrue)"},{"line_number":1644,"context_line":"    @mock.patch.object(drac_job, \u0027wait_for_job_completion\u0027, spec_set\u003dTrue,"},{"line_number":1645,"context_line":"                       autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_2e0379ba","line":1642,"updated":"2019-09-11 21:34:47.000000000","message":"I don\u0027t think it\u0027s necessary to mock list_unfinished_jobs because it appears to only be called from within wait_for_job_completion, which is mocked below.","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"315769c7eb14957c6be837b21d260330de03a704","unresolved":false,"context_lines":[{"line_number":1639,"context_line":"                       autospec\u003dTrue)"},{"line_number":1640,"context_line":"    @mock.patch.object(drac_raid, \u0027change_physical_disk_state\u0027, spec_set\u003dTrue,"},{"line_number":1641,"context_line":"                       autospec\u003dTrue)"},{"line_number":1642,"context_line":"    @mock.patch.object(drac_job, \u0027list_unfinished_jobs\u0027, spec_set\u003dTrue,"},{"line_number":1643,"context_line":"                       autospec\u003dTrue)"},{"line_number":1644,"context_line":"    @mock.patch.object(drac_job, \u0027wait_for_job_completion\u0027, spec_set\u003dTrue,"},{"line_number":1645,"context_line":"                       autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_0cfea46a","line":1642,"in_reply_to":"5faad753_2e0379ba","updated":"2019-09-13 08:31:13.000000000","message":"Done","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            \u0027conversion_results\u0027: {"},{"line_number":296,"context_line":"                \u0027RAID.Integrated.1-1\u0027: {\u0027is_reboot_required\u0027: \u0027optional\u0027,"},{"line_number":297,"context_line":"                                        \u0027is_commit_required\u0027: True}},"},{"line_number":298,"context_line":"                \u0027commit_required_ids\u0027: [\u0027RAID.Integrated.1-1\u0027]}"},{"line_number":299,"context_line":"        mode \u003d constants.RaidStatus.raid"},{"line_number":300,"context_line":"        mock_client.change_physical_disk_state.return_value \u003d \\"},{"line_number":301,"context_line":"            expected_change_disk_state"}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_a2518bdb","line":298,"updated":"2019-09-13 21:04:54.000000000","message":"nit: Can you unindent the above line 4 spaces?  commit_required_ids is in the main dict, but the above indentation makes it look like it\u0027s in the conversion_results dict.","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            \u0027conversion_results\u0027: {"},{"line_number":296,"context_line":"                \u0027RAID.Integrated.1-1\u0027: {\u0027is_reboot_required\u0027: \u0027optional\u0027,"},{"line_number":297,"context_line":"                                        \u0027is_commit_required\u0027: True}},"},{"line_number":298,"context_line":"                \u0027commit_required_ids\u0027: [\u0027RAID.Integrated.1-1\u0027]}"},{"line_number":299,"context_line":"        mode \u003d constants.RaidStatus.raid"},{"line_number":300,"context_line":"        mock_client.change_physical_disk_state.return_value \u003d \\"},{"line_number":301,"context_line":"            expected_change_disk_state"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_67882c71","line":298,"in_reply_to":"5faad753_a2518bdb","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":766,"context_line":"                 \u0027Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1\u0027],"},{"line_number":767,"context_line":"                \u00271\u0027, 51200, None, 2, 1)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"            mock_commit_config.assert_called_with("},{"line_number":770,"context_line":"                task.node, raid_controller\u003d\u0027RAID.Integrated.1-1\u0027, reboot\u003dFalse,"},{"line_number":771,"context_line":"                realtime\u003dTrue)"},{"line_number":772,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_c5ea91d6","line":769,"updated":"2019-09-13 21:04:54.000000000","message":"Could you add an assert here that validates commit_config was called twice?  Once for the disk conversion, and once for virtual disk creation.","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":766,"context_line":"                 \u0027Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1\u0027],"},{"line_number":767,"context_line":"                \u00271\u0027, 51200, None, 2, 1)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"            mock_commit_config.assert_called_with("},{"line_number":770,"context_line":"                task.node, raid_controller\u003d\u0027RAID.Integrated.1-1\u0027, reboot\u003dFalse,"},{"line_number":771,"context_line":"                realtime\u003dTrue)"},{"line_number":772,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_8790c897","line":769,"in_reply_to":"5faad753_c5ea91d6","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":766,"context_line":"                 \u0027Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1\u0027],"},{"line_number":767,"context_line":"                \u00271\u0027, 51200, None, 2, 1)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"            mock_commit_config.assert_called_with("},{"line_number":770,"context_line":"                task.node, raid_controller\u003d\u0027RAID.Integrated.1-1\u0027, reboot\u003dFalse,"},{"line_number":771,"context_line":"                realtime\u003dTrue)"},{"line_number":772,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_c7db207b","line":769,"in_reply_to":"5faad753_c5ea91d6","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                task, create_root_volume\u003dFalse, create_nonroot_volumes\u003dFalse)"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"            self.assertEqual(0, mock_client.create_virtual_disk.call_count)"},{"line_number":813,"context_line":"            self.assertEqual(1, mock_commit_config.call_count)"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        self.assertIsNone(return_value)"},{"line_number":816,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_a560b5d0","line":813,"updated":"2019-09-13 21:04:54.000000000","message":"In this test, no virtual disks are created.  If no virtual disks are created, then no drives should be converted, and commit_config should never be called, so this change should not be needed.","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                task, create_root_volume\u003dFalse, create_nonroot_volumes\u003dFalse)"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"            self.assertEqual(0, mock_client.create_virtual_disk.call_count)"},{"line_number":813,"context_line":"            self.assertEqual(1, mock_commit_config.call_count)"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        self.assertIsNone(return_value)"},{"line_number":816,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_67d6ec52","line":813,"in_reply_to":"5faad753_a560b5d0","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":875,"context_line":"                \u00275+0\u0027, 102400, None, 3, 2)"},{"line_number":876,"context_line":""},{"line_number":877,"context_line":"            # Commits to the controller"},{"line_number":878,"context_line":"            mock_commit_config.assert_called_with("},{"line_number":879,"context_line":"                mock.ANY, raid_controller\u003d\u0027RAID.Integrated.1-1\u0027, reboot\u003dFalse,"},{"line_number":880,"context_line":"                realtime\u003dTrue)"},{"line_number":881,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_e5d0ed21","line":878,"updated":"2019-09-13 21:04:54.000000000","message":"Could you add an assert here that validates commit_config was called twice?  Once for the disk conversion, and once for virtual disk creation.","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":875,"context_line":"                \u00275+0\u0027, 102400, None, 3, 2)"},{"line_number":876,"context_line":""},{"line_number":877,"context_line":"            # Commits to the controller"},{"line_number":878,"context_line":"            mock_commit_config.assert_called_with("},{"line_number":879,"context_line":"                mock.ANY, raid_controller\u003d\u0027RAID.Integrated.1-1\u0027, reboot\u003dFalse,"},{"line_number":880,"context_line":"                realtime\u003dTrue)"},{"line_number":881,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_27d0f450","line":878,"in_reply_to":"5faad753_e5d0ed21","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":939,"context_line":"                \u00271+0\u0027, 102400, None, None, None)"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"            # Commits to the controller"},{"line_number":942,"context_line":"            mock_commit_config.assert_called_with("},{"line_number":943,"context_line":"                mock.ANY, raid_controller\u003d\u0027RAID.Integrated.1-1\u0027, reboot\u003dFalse,"},{"line_number":944,"context_line":"                realtime\u003dTrue)"},{"line_number":945,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_65a2bdb0","line":942,"updated":"2019-09-13 21:04:54.000000000","message":"Same here","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":939,"context_line":"                \u00271+0\u0027, 102400, None, None, None)"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"            # Commits to the controller"},{"line_number":942,"context_line":"            mock_commit_config.assert_called_with("},{"line_number":943,"context_line":"                mock.ANY, raid_controller\u003d\u0027RAID.Integrated.1-1\u0027, reboot\u003dFalse,"},{"line_number":944,"context_line":"                realtime\u003dTrue)"},{"line_number":945,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_e7c17c82","line":942,"in_reply_to":"5faad753_65a2bdb0","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":1260,"context_line":"                       autospec\u003dTrue)"},{"line_number":1261,"context_line":"    @mock.patch.object(drac_job, \u0027wait_for_job_completion\u0027, spec_set\u003dTrue,"},{"line_number":1262,"context_line":"                       autospec\u003dTrue)"},{"line_number":1263,"context_line":"    def test_create_configuration_with_max_size_without_backing_disks("},{"line_number":1264,"context_line":"            self, mock_list_physical_disks, mock_wait_for_job_completion,"},{"line_number":1265,"context_line":"            mock_change_physical_disk_state, mock_get_drac_client):"},{"line_number":1266,"context_line":"        mock_client \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_05a18994","line":1263,"updated":"2019-09-13 21:04:54.000000000","message":"I don\u0027t think any changes are needed to this test case because the exception is raised before drive conversion is attempted.","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":1260,"context_line":"                       autospec\u003dTrue)"},{"line_number":1261,"context_line":"    @mock.patch.object(drac_job, \u0027wait_for_job_completion\u0027, spec_set\u003dTrue,"},{"line_number":1262,"context_line":"                       autospec\u003dTrue)"},{"line_number":1263,"context_line":"    def test_create_configuration_with_max_size_without_backing_disks("},{"line_number":1264,"context_line":"            self, mock_list_physical_disks, mock_wait_for_job_completion,"},{"line_number":1265,"context_line":"            mock_change_physical_disk_state, mock_get_drac_client):"},{"line_number":1266,"context_line":"        mock_client \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_87be88fd","line":1263,"in_reply_to":"5faad753_05a18994","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":1373,"context_line":"                       autospec\u003dTrue)"},{"line_number":1374,"context_line":"    @mock.patch.object(drac_raid, \u0027commit_config\u0027, spec_set\u003dTrue,"},{"line_number":1375,"context_line":"                       autospec\u003dTrue)"},{"line_number":1376,"context_line":"    def test_create_configuration_fails_with_sharing_disabled("},{"line_number":1377,"context_line":"            self, mock_commit_config, mock_wait_for_job_completion,"},{"line_number":1378,"context_line":"            mock_change_physical_disk_state, mock_validate_job_queue,"},{"line_number":1379,"context_line":"            mock_list_physical_disks, mock_get_drac_client):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_458541ce","line":1376,"updated":"2019-09-13 21:04:54.000000000","message":"I think that no changes are needed to this test case because I believe the exception will be raise from within _find_configuration, which is called before drive conversion.","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":1373,"context_line":"                       autospec\u003dTrue)"},{"line_number":1374,"context_line":"    @mock.patch.object(drac_raid, \u0027commit_config\u0027, spec_set\u003dTrue,"},{"line_number":1375,"context_line":"                       autospec\u003dTrue)"},{"line_number":1376,"context_line":"    def test_create_configuration_fails_with_sharing_disabled("},{"line_number":1377,"context_line":"            self, mock_commit_config, mock_wait_for_job_completion,"},{"line_number":1378,"context_line":"            mock_change_physical_disk_state, mock_validate_job_queue,"},{"line_number":1379,"context_line":"            mock_list_physical_disks, mock_get_drac_client):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_a7bb840c","line":1376,"in_reply_to":"5faad753_458541ce","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":1495,"context_line":"                       autospec\u003dTrue)"},{"line_number":1496,"context_line":"    @mock.patch.object(drac_raid, \u0027commit_config\u0027, spec_set\u003dTrue,"},{"line_number":1497,"context_line":"                       autospec\u003dTrue)"},{"line_number":1498,"context_line":"    def test_create_configuration_with_multiple_max_and_sharing_same_disks("},{"line_number":1499,"context_line":"            self, mock_commit_config, mock_wait_for_job_completion,"},{"line_number":1500,"context_line":"            mock_change_physical_disk_state, mock_validate_job_queue,"},{"line_number":1501,"context_line":"            mock_list_physical_disks, mock_get_drac_client):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_65639d43","line":1498,"updated":"2019-09-13 21:04:54.000000000","message":"I think this is another case where these changes are not needed.","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":1495,"context_line":"                       autospec\u003dTrue)"},{"line_number":1496,"context_line":"    @mock.patch.object(drac_raid, \u0027commit_config\u0027, spec_set\u003dTrue,"},{"line_number":1497,"context_line":"                       autospec\u003dTrue)"},{"line_number":1498,"context_line":"    def test_create_configuration_with_multiple_max_and_sharing_same_disks("},{"line_number":1499,"context_line":"            self, mock_commit_config, mock_wait_for_job_completion,"},{"line_number":1500,"context_line":"            mock_change_physical_disk_state, mock_validate_job_queue,"},{"line_number":1501,"context_line":"            mock_list_physical_disks, mock_get_drac_client):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_07405807","line":1498,"in_reply_to":"5faad753_65639d43","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":1554,"context_line":"                       autospec\u003dTrue)"},{"line_number":1555,"context_line":"    @mock.patch.object(drac_raid, \u0027create_virtual_disk\u0027, spec_set\u003dTrue,"},{"line_number":1556,"context_line":"                       autospec\u003dTrue)"},{"line_number":1557,"context_line":"    def test_create_configuration_fails_if_not_enough_space("},{"line_number":1558,"context_line":"            self, mock_create_virtual_disk, mock_commit_config,"},{"line_number":1559,"context_line":"            mock_wait_for_job_completion, mock_change_physical_disk_state,"},{"line_number":1560,"context_line":"            mock_validate_job_queue, mock_list_physical_disks,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_455ea176","line":1557,"updated":"2019-09-13 21:04:54.000000000","message":"Same here","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":1554,"context_line":"                       autospec\u003dTrue)"},{"line_number":1555,"context_line":"    @mock.patch.object(drac_raid, \u0027create_virtual_disk\u0027, spec_set\u003dTrue,"},{"line_number":1556,"context_line":"                       autospec\u003dTrue)"},{"line_number":1557,"context_line":"    def test_create_configuration_fails_if_not_enough_space("},{"line_number":1558,"context_line":"            self, mock_create_virtual_disk, mock_commit_config,"},{"line_number":1559,"context_line":"            mock_wait_for_job_completion, mock_change_physical_disk_state,"},{"line_number":1560,"context_line":"            mock_validate_job_queue, mock_list_physical_disks,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_075938fd","line":1557,"in_reply_to":"5faad753_455ea176","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"496b22a597209d9deffa29f94203f9a95302682d","unresolved":false,"context_lines":[{"line_number":1606,"context_line":"                       autospec\u003dTrue)"},{"line_number":1607,"context_line":"    @mock.patch.object(drac_raid, \u0027create_virtual_disk\u0027, spec_set\u003dTrue,"},{"line_number":1608,"context_line":"                       autospec\u003dTrue)"},{"line_number":1609,"context_line":"    def test_create_configuration_fails_if_disk_already_reserved("},{"line_number":1610,"context_line":"            self, mock_create_virtual_disk, mock_commit_config,"},{"line_number":1611,"context_line":"            mock_wait_for_job_completion, mock_change_physical_disk_state,"},{"line_number":1612,"context_line":"            mock_validate_job_queue, mock_list_physical_disks,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5faad753_e556ad5c","line":1609,"updated":"2019-09-13 21:04:54.000000000","message":"Same here","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":29405,"name":"Rachit Kapadia","email":"kapadiarachit007@gmail.com","username":"rachit7194"},"change_message_id":"dfddb3af2bc1fc8e0c33ac406b0b36486ab8b519","unresolved":false,"context_lines":[{"line_number":1606,"context_line":"                       autospec\u003dTrue)"},{"line_number":1607,"context_line":"    @mock.patch.object(drac_raid, \u0027create_virtual_disk\u0027, spec_set\u003dTrue,"},{"line_number":1608,"context_line":"                       autospec\u003dTrue)"},{"line_number":1609,"context_line":"    def test_create_configuration_fails_if_disk_already_reserved("},{"line_number":1610,"context_line":"            self, mock_create_virtual_disk, mock_commit_config,"},{"line_number":1611,"context_line":"            mock_wait_for_job_completion, mock_change_physical_disk_state,"},{"line_number":1612,"context_line":"            mock_validate_job_queue, mock_list_physical_disks,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_e76f3c90","line":1609,"in_reply_to":"5faad753_e556ad5c","updated":"2019-09-16 15:12:23.000000000","message":"Done","commit_id":"09cdbbf8fd1104ec16e240037e743889b939895f"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"589315b1a35cf0e6e318c0166646ae6c2fc909d8","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            \u0027conversion_results\u0027: {"},{"line_number":296,"context_line":"                \u0027RAID.Integrated.1-1\u0027: {\u0027is_reboot_required\u0027: \u0027optional\u0027,"},{"line_number":297,"context_line":"                                        \u0027is_commit_required\u0027: True}},"},{"line_number":298,"context_line":"                \u0027commit_required_ids\u0027: [\u0027RAID.Integrated.1-1\u0027]}"},{"line_number":299,"context_line":"        mode \u003d constants.RaidStatus.raid"},{"line_number":300,"context_line":"        mock_client.change_physical_disk_state.return_value \u003d \\"},{"line_number":301,"context_line":"            expected_change_disk_state"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_b9ec03f4","line":298,"updated":"2019-09-16 20:08:17.000000000","message":"nit: Can you unindent the above line 4 spaces?  commit_required_ids is in the main dict, but the above indentation makes it look like it\u0027s in the conversion_results dict.  This would make this look like line 327 below.","commit_id":"87a786dc52f99c9801056484f656d25dbcda5bee"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"d94d0239e5e0f225f2cb09d542b47cfdc643ef87","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        mock_commit_config.assert_called_once_with("},{"line_number":343,"context_line":"            self.node, raid_controller\u003d\u0027RAID.Integrated.1-1\u0027, reboot\u003dFalse,"},{"line_number":344,"context_line":"            realtime\u003dTrue)"},{"line_number":345,"context_line":"        self.assertEqual(\u0027wait call-back\u0027, actual_change_disk_state)"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def test_commit_config(self, mock_get_drac_client):"},{"line_number":348,"context_line":"        mock_client \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_e45d1d79","line":345,"updated":"2019-09-27 19:08:10.000000000","message":"Would you mind changing \u0027wait call-back\u0027 in the above line to states.DEPLOYWAIT?","commit_id":"63cd8fc878906b3bf3cc90ad89b97633e62f83ad"},{"author":{"_account_id":10250,"name":"Christopher Dearborn","email":"Christopher.Dearborn@dell.com","username":"cdearbor"},"change_message_id":"d94d0239e5e0f225f2cb09d542b47cfdc643ef87","unresolved":false,"context_lines":[{"line_number":765,"context_line":"                       autospec\u003dTrue)"},{"line_number":766,"context_line":"    @mock.patch.object(drac_raid, \u0027change_physical_disk_state\u0027, spec_set\u003dTrue,"},{"line_number":767,"context_line":"                       autospec\u003dTrue)"},{"line_number":768,"context_line":"    @mock.patch.object(drac_job, \u0027list_unfinished_jobs\u0027, spec_set\u003dTrue,"},{"line_number":769,"context_line":"                       autospec\u003dTrue)"},{"line_number":770,"context_line":"    @mock.patch.object(drac_job, \u0027wait_for_job_completion\u0027, spec_set\u003dTrue,"},{"line_number":771,"context_line":"                       autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_a422c5b7","line":768,"updated":"2019-09-27 19:08:10.000000000","message":"I don\u0027t think we need to mock list_unfinished_jobs() because it is called from wait_for_job_completion() which is mocked, and validate_job_queue(), which is called by changes_physical_disk_state(), but that is mocked too.","commit_id":"63cd8fc878906b3bf3cc90ad89b97633e62f83ad"}],"releasenotes/notes/idrac-drives-conversion-jbod-to-raid-1a229627708e10b9.yaml":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"dc156c2e1fd8bcfa3fc52c581a9fd4edfd7cfc5c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hardware type ``idrac`` converts physical drives from"},{"line_number":5,"context_line":"    ``JBOD`` to ``RAID`` mode before RAID ``create_configuration``"},{"line_number":6,"context_line":"    cleaning step."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5faad753_3c4baeb0","line":4,"updated":"2019-09-12 07:19:41.000000000","message":"maybe reformule this also adding the reason why this is done ?","commit_id":"8f13762bc4998d6d73b6ba185dab4520783e7030"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"57ed777f9d8fb3dac8d52c0c218ca22a83e27007","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hardware type ``idrac`` converts physical drives from"},{"line_number":5,"context_line":"    ``JBOD`` to ``RAID`` mode before RAID ``create_configuration``"},{"line_number":6,"context_line":"    cleaning step."}],"source_content_type":"text/x-yaml","patch_set":21,"id":"3fa7e38b_b3590936","line":5,"updated":"2019-10-09 09:18:48.000000000","message":"nit: \"before building RAID on them.\"","commit_id":"3c1954befa5c8bd9ec82a824f9a0efa427dfce9d"}]}
