)]}'
{"ironic/conductor/manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3197c8a6ee6a1101c87a660bd556aac8a0be7f44","unresolved":false,"context_lines":[{"line_number":1638,"context_line":"    def _sync_power_states(self, context):"},{"line_number":1639,"context_line":"        \"\"\"Periodic task to sync power states for the nodes.\"\"\""},{"line_number":1640,"context_line":"        filters \u003d {\u0027maintenance\u0027: False}"},{"line_number":1641,"context_line":"        nodes \u003d queue.Queue()"},{"line_number":1642,"context_line":"        for node_info in self.iter_nodes(fields\u003d[\u0027id\u0027], filters\u003dfilters):"},{"line_number":1643,"context_line":"            nodes.put_nowait(node_info)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        number_of_threads \u003d min(CONF.conductor.sync_power_state_workers,"},{"line_number":1646,"context_line":"                                CONF.conductor.periodic_max_workers,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_70f77cf7","line":1643,"range":{"start_line":1641,"start_character":0,"end_line":1643,"end_character":39},"updated":"2019-01-21 10:38:16.000000000","message":"nit: _nowait is not needed (this cannot block)","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"92a5c6e7bacd7c2c944e45c81a9334845c175eb7","unresolved":false,"context_lines":[{"line_number":1638,"context_line":"    def _sync_power_states(self, context):"},{"line_number":1639,"context_line":"        \"\"\"Periodic task to sync power states for the nodes.\"\"\""},{"line_number":1640,"context_line":"        filters \u003d {\u0027maintenance\u0027: False}"},{"line_number":1641,"context_line":"        nodes \u003d queue.Queue()"},{"line_number":1642,"context_line":"        for node_info in self.iter_nodes(fields\u003d[\u0027id\u0027], filters\u003dfilters):"},{"line_number":1643,"context_line":"            nodes.put_nowait(node_info)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        number_of_threads \u003d min(CONF.conductor.sync_power_state_workers,"},{"line_number":1646,"context_line":"                                CONF.conductor.periodic_max_workers,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_8a598cff","line":1643,"range":{"start_line":1641,"start_character":0,"end_line":1643,"end_character":39},"in_reply_to":"9fdfeff1_70f77cf7","updated":"2019-01-21 15:16:36.000000000","message":"Done","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3197c8a6ee6a1101c87a660bd556aac8a0be7f44","unresolved":false,"context_lines":[{"line_number":1653,"context_line":"                                       context, nodes))"},{"line_number":1654,"context_line":"            except exception.NoFreeConductorWorker:"},{"line_number":1655,"context_line":"                LOG.warning(\"There is no more conductor workers for \""},{"line_number":1656,"context_line":"                            \"power sync task. %(workers)d workers has \""},{"line_number":1657,"context_line":"                            \"been already spawned.\","},{"line_number":1658,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1659,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_f0bb6c0b","line":1656,"range":{"start_line":1656,"start_character":66,"end_line":1656,"end_character":69},"updated":"2019-01-21 10:38:16.000000000","message":"nit: have","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"92a5c6e7bacd7c2c944e45c81a9334845c175eb7","unresolved":false,"context_lines":[{"line_number":1653,"context_line":"                                       context, nodes))"},{"line_number":1654,"context_line":"            except exception.NoFreeConductorWorker:"},{"line_number":1655,"context_line":"                LOG.warning(\"There is no more conductor workers for \""},{"line_number":1656,"context_line":"                            \"power sync task. %(workers)d workers has \""},{"line_number":1657,"context_line":"                            \"been already spawned.\","},{"line_number":1658,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1659,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_0a6d9c97","line":1656,"range":{"start_line":1656,"start_character":66,"end_line":1656,"end_character":69},"in_reply_to":"9fdfeff1_f0bb6c0b","updated":"2019-01-21 15:16:36.000000000","message":"Done","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3197c8a6ee6a1101c87a660bd556aac8a0be7f44","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"                            \"been already spawned.\","},{"line_number":1658,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1659,"context_line":"                break"},{"line_number":1660,"context_line":""},{"line_number":1661,"context_line":"        done, not_done \u003d waiters.wait_for_all("},{"line_number":1662,"context_line":"            futures, timeout\u003dCONF.conductor.sync_power_state_interval)"},{"line_number":1663,"context_line":"        if not_done:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_f0504cd7","line":1660,"updated":"2019-01-21 10:38:16.000000000","message":"What if we actually reuse this thread for some of work? I.e. treat this as thread #0 and process some part of the work here. Then wait for the other threads.","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"92a5c6e7bacd7c2c944e45c81a9334845c175eb7","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"                            \"been already spawned.\","},{"line_number":1658,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1659,"context_line":"                break"},{"line_number":1660,"context_line":""},{"line_number":1661,"context_line":"        done, not_done \u003d waiters.wait_for_all("},{"line_number":1662,"context_line":"            futures, timeout\u003dCONF.conductor.sync_power_state_interval)"},{"line_number":1663,"context_line":"        if not_done:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_4d3e5e2a","line":1660,"in_reply_to":"9fdfeff1_f0504cd7","updated":"2019-01-21 15:16:36.000000000","message":"Done","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3197c8a6ee6a1101c87a660bd556aac8a0be7f44","unresolved":false,"context_lines":[{"line_number":1659,"context_line":"                break"},{"line_number":1660,"context_line":""},{"line_number":1661,"context_line":"        done, not_done \u003d waiters.wait_for_all("},{"line_number":1662,"context_line":"            futures, timeout\u003dCONF.conductor.sync_power_state_interval)"},{"line_number":1663,"context_line":"        if not_done:"},{"line_number":1664,"context_line":"            LOG.warning(\"%d out of %d workers for power sync did not complete\","},{"line_number":1665,"context_line":"                        len(not_done), len(done) + len(not_done))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_30d9f482","line":1662,"range":{"start_line":1662,"start_character":19,"end_line":1662,"end_character":69},"updated":"2019-01-21 10:38:16.000000000","message":"I don\u0027t think we should have a timeout here. What do we do if timeout is reached? The actual thread keeps going.","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"92a5c6e7bacd7c2c944e45c81a9334845c175eb7","unresolved":false,"context_lines":[{"line_number":1659,"context_line":"                break"},{"line_number":1660,"context_line":""},{"line_number":1661,"context_line":"        done, not_done \u003d waiters.wait_for_all("},{"line_number":1662,"context_line":"            futures, timeout\u003dCONF.conductor.sync_power_state_interval)"},{"line_number":1663,"context_line":"        if not_done:"},{"line_number":1664,"context_line":"            LOG.warning(\"%d out of %d workers for power sync did not complete\","},{"line_number":1665,"context_line":"                        len(not_done), len(done) + len(not_done))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_8a5bcc85","line":1662,"range":{"start_line":1662,"start_character":19,"end_line":1662,"end_character":69},"in_reply_to":"9fdfeff1_30d9f482","updated":"2019-01-21 15:16:36.000000000","message":"Done","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"5c00d0438a3d709e45ca6f4037e371527461783f","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"                    self._spawn_worker(self._sync_power_state_nodes_task,"},{"line_number":1658,"context_line":"                                       context, nodes))"},{"line_number":1659,"context_line":"            except exception.NoFreeConductorWorker:"},{"line_number":1660,"context_line":"                LOG.warning(\"There is no more conductor workers for \""},{"line_number":1661,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1662,"context_line":"                            \"been already spawned.\","},{"line_number":1663,"context_line":"                            {\u0027workers\u0027: thread_number})"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_c3277fb6","line":1660,"range":{"start_line":1660,"start_character":35,"end_line":1660,"end_character":37},"updated":"2019-01-21 15:48:45.000000000","message":"Nit: are","commit_id":"18d171beb946044e10c0dd72c9b52bfacb9bbdb9"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"f4f23b3617f47ffbdfe1c51d111eaab270ebdfeb","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"                    self._spawn_worker(self._sync_power_state_nodes_task,"},{"line_number":1658,"context_line":"                                       context, nodes))"},{"line_number":1659,"context_line":"            except exception.NoFreeConductorWorker:"},{"line_number":1660,"context_line":"                LOG.warning(\"There is no more conductor workers for \""},{"line_number":1661,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1662,"context_line":"                            \"been already spawned.\","},{"line_number":1663,"context_line":"                            {\u0027workers\u0027: thread_number})"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_837df76f","line":1660,"range":{"start_line":1660,"start_character":35,"end_line":1660,"end_character":37},"in_reply_to":"9fdfeff1_c3277fb6","updated":"2019-01-21 15:52:14.000000000","message":"Done","commit_id":"18d171beb946044e10c0dd72c9b52bfacb9bbdb9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7d2fa97d93292e54c3fb73d1676568e9c07aceac","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1662,"context_line":"                            \"been already spawned.\","},{"line_number":1663,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1664,"context_line":"                break"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"},{"line_number":1667,"context_line":"        \"\"\"Invokes power state sync on nodes from synchronized queue."}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_eabcc6bc","line":1664,"updated":"2019-01-22 10:11:30.000000000","message":"I think we still should wait on all futures, just without timeout. Otherwise we risk starting the periodic sync again for slow nodes (the lock is shared). Or we should anyhow ensure that the sync does not run for the same node in parallel.","commit_id":"b8ebb2dd0970e4395aabd0f58eaa761e71fdaa67"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"af5c205bf31219e8f1edb0842c1de7c493f2a1d0","unresolved":false,"context_lines":[{"line_number":1661,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1662,"context_line":"                            \"been already spawned.\","},{"line_number":1663,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1664,"context_line":"                break"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"},{"line_number":1667,"context_line":"        \"\"\"Invokes power state sync on nodes from synchronized queue."}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_6ad776c1","line":1664,"in_reply_to":"9fdfeff1_eabcc6bc","updated":"2019-01-22 10:24:04.000000000","message":"That\u0027s the excellent point! Let\u0027s see if the new way is any better?","commit_id":"b8ebb2dd0970e4395aabd0f58eaa761e71fdaa67"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"a53d7410012ed4e2dd9c0146d4c071a3e43957da","unresolved":false,"context_lines":[{"line_number":1648,"context_line":"        futures \u003d []"},{"line_number":1649,"context_line":""},{"line_number":1650,"context_line":"        for thread_number in range(number_of_threads):"},{"line_number":1651,"context_line":"            if thread_number \u003d\u003d number_of_threads - 1:"},{"line_number":1652,"context_line":"                self._sync_power_state_nodes_task(context, nodes)"},{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"            try:"},{"line_number":1655,"context_line":"                futures.append("}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_6d9f9050","line":1652,"range":{"start_line":1651,"start_character":0,"end_line":1652,"end_character":65},"updated":"2019-01-22 11:02:48.000000000","message":"Could you explain this processing? In case \"thread_number \u003d\u003d number_of_threads - 1\", _sync_power_state_nodes_task() is called, but then a new worker is still spawned.","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"cf3ac94936661a285d287232192f4b44d60d6e4c","unresolved":false,"context_lines":[{"line_number":1648,"context_line":"        futures \u003d []"},{"line_number":1649,"context_line":""},{"line_number":1650,"context_line":"        for thread_number in range(number_of_threads):"},{"line_number":1651,"context_line":"            if thread_number \u003d\u003d number_of_threads - 1:"},{"line_number":1652,"context_line":"                self._sync_power_state_nodes_task(context, nodes)"},{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"            try:"},{"line_number":1655,"context_line":"                futures.append("}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_d1abaed3","line":1652,"range":{"start_line":1651,"start_character":0,"end_line":1652,"end_character":65},"in_reply_to":"9fdfeff1_08d7d24d","updated":"2019-01-22 17:32:04.000000000","message":"Done","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"7decadb759a2d6985d87bbb1c04507555c2a5b47","unresolved":false,"context_lines":[{"line_number":1648,"context_line":"        futures \u003d []"},{"line_number":1649,"context_line":""},{"line_number":1650,"context_line":"        for thread_number in range(number_of_threads):"},{"line_number":1651,"context_line":"            if thread_number \u003d\u003d number_of_threads - 1:"},{"line_number":1652,"context_line":"                self._sync_power_state_nodes_task(context, nodes)"},{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"            try:"},{"line_number":1655,"context_line":"                futures.append("}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_8d0d1492","line":1652,"range":{"start_line":1651,"start_character":0,"end_line":1652,"end_character":65},"in_reply_to":"9fdfeff1_6d9f9050","updated":"2019-01-22 11:09:18.000000000","message":"The idea is to use this thread (i.e. the periodic task thread) for power sync after it\u0027s done spawning the other N-1 threads. This condition should only execute on the very last (or the only) iteration of this loop.\n\nDoes it make sense?","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c69644456f4f607c573535070c465c7a1f632d15","unresolved":false,"context_lines":[{"line_number":1648,"context_line":"        futures \u003d []"},{"line_number":1649,"context_line":""},{"line_number":1650,"context_line":"        for thread_number in range(number_of_threads):"},{"line_number":1651,"context_line":"            if thread_number \u003d\u003d number_of_threads - 1:"},{"line_number":1652,"context_line":"                self._sync_power_state_nodes_task(context, nodes)"},{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"            try:"},{"line_number":1655,"context_line":"                futures.append("}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_08d7d24d","line":1652,"range":{"start_line":1651,"start_character":0,"end_line":1652,"end_character":65},"in_reply_to":"9fdfeff1_8d0d1492","updated":"2019-01-22 11:43:49.000000000","message":"Would be simpler to loop (number_of_threads - 1), then do this after the loop.\n\nThat said, the risk of doing this is that if there is an unhandled exception in this thread then we won\u0027t wait for the others. Might be safer \u0026 simpler to just spawn N threads and wait.","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"a53d7410012ed4e2dd9c0146d4c071a3e43957da","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1661,"context_line":"                            \"been already spawned.\","},{"line_number":1662,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        waiters.wait_for_all(futures)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_cddc7c1a","line":1663,"updated":"2019-01-22 11:02:48.000000000","message":"We may have multiple warning messages here if NoFreeConductorWorker is raised in the middle of the loop.","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c69644456f4f607c573535070c465c7a1f632d15","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1661,"context_line":"                            \"been already spawned.\","},{"line_number":1662,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        waiters.wait_for_all(futures)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_48bcfa04","line":1663,"in_reply_to":"9fdfeff1_281c1669","updated":"2019-01-22 11:43:49.000000000","message":"If we ditch the last attempt special case as I suggest, we can fix this with \u0027break\u0027.","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"cf3ac94936661a285d287232192f4b44d60d6e4c","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1661,"context_line":"                            \"been already spawned.\","},{"line_number":1662,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        waiters.wait_for_all(futures)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_71b8c229","line":1663,"in_reply_to":"9fdfeff1_48bcfa04","updated":"2019-01-22 17:32:04.000000000","message":"Done","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"a4698626d378cac4e67136e02f10bd53d39a9588","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1661,"context_line":"                            \"been already spawned.\","},{"line_number":1662,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        waiters.wait_for_all(futures)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_edf4e05d","line":1663,"in_reply_to":"9fdfeff1_cd78fcf9","updated":"2019-01-22 11:13:47.000000000","message":"Does that require additional code? Isn\u0027t moving the loop into the try block enough?","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"7decadb759a2d6985d87bbb1c04507555c2a5b47","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1661,"context_line":"                            \"been already spawned.\","},{"line_number":1662,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        waiters.wait_for_all(futures)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_cd78fcf9","line":1663,"in_reply_to":"9fdfeff1_cddc7c1a","updated":"2019-01-22 11:09:18.000000000","message":"That\u0027s true...  Though reported thread number will be different.... Do you think that potential/partial duplication justifies adding some code to work around it?","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"10410aa51eb62a22d319420c5c31c7cf9b51f640","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1661,"context_line":"                            \"been already spawned.\","},{"line_number":1662,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        waiters.wait_for_all(futures)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_281c1669","line":1663,"in_reply_to":"9fdfeff1_ed506035","updated":"2019-01-22 11:28:23.000000000","message":"That\u0027s exactly my thinking... Let\u0027s see what other people think. it\u0027s trivial code-wise, just some extra complexity.","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"e3109c57efe3f4d165fa617379c398938085ca68","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1661,"context_line":"                            \"been already spawned.\","},{"line_number":1662,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        waiters.wait_for_all(futures)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_ed506035","line":1663,"in_reply_to":"9fdfeff1_edc2a0e9","updated":"2019-01-22 11:21:08.000000000","message":"Oh, yes, I missed that. I don\u0027t think having a handful (max is 8, no?) of these error messages is an issue.","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"475e925a16da9f1327e6a425b016c1d46c33b35a","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                            \"power sync task. %(workers)d workers have \""},{"line_number":1661,"context_line":"                            \"been already spawned.\","},{"line_number":1662,"context_line":"                            {\u0027workers\u0027: thread_number})"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        waiters.wait_for_all(futures)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"    def _sync_power_state_nodes_task(self, context, nodes):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_edc2a0e9","line":1663,"in_reply_to":"9fdfeff1_edf4e05d","updated":"2019-01-22 11:17:09.000000000","message":"Perhaps the exception would terminate the loop. While we still need to reach its last iteration to reuse the periodic thread itself...","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"edbd2798797f4489f81f05db2dcf5cd47ead979d","unresolved":false,"context_lines":[{"line_number":1638,"context_line":"    def _sync_power_states(self, context):"},{"line_number":1639,"context_line":"        \"\"\"Periodic task to sync power states for the nodes.\"\"\""},{"line_number":1640,"context_line":"        filters \u003d {\u0027maintenance\u0027: False}"},{"line_number":1641,"context_line":"        nodes \u003d queue.Queue()"},{"line_number":1642,"context_line":"        for node_info in self.iter_nodes(fields\u003d[\u0027id\u0027], filters\u003dfilters):"},{"line_number":1643,"context_line":"            nodes.put(node_info)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        number_of_threads \u003d min(CONF.conductor.sync_power_state_workers,"},{"line_number":1646,"context_line":"                                CONF.conductor.periodic_max_workers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_dad64c28","line":1643,"range":{"start_line":1641,"start_character":0,"end_line":1643,"end_character":32},"updated":"2019-01-23 19:16:27.000000000","message":"I had an insightful comment/thought on ordering that gerrit apparently ate last night. I feel like if we ordered DESC from last_updated, then we would better guarantee that we get through all the nodes as the oldest would be the first hit.","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b0b79a4a12796ee4877ac1cf5dac1a4779e4c7c5","unresolved":false,"context_lines":[{"line_number":1638,"context_line":"    def _sync_power_states(self, context):"},{"line_number":1639,"context_line":"        \"\"\"Periodic task to sync power states for the nodes.\"\"\""},{"line_number":1640,"context_line":"        filters \u003d {\u0027maintenance\u0027: False}"},{"line_number":1641,"context_line":"        nodes \u003d queue.Queue()"},{"line_number":1642,"context_line":"        for node_info in self.iter_nodes(fields\u003d[\u0027id\u0027], filters\u003dfilters):"},{"line_number":1643,"context_line":"            nodes.put(node_info)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        number_of_threads \u003d min(CONF.conductor.sync_power_state_workers,"},{"line_number":1646,"context_line":"                                CONF.conductor.periodic_max_workers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_94b7bd3a","line":1643,"range":{"start_line":1641,"start_character":0,"end_line":1643,"end_character":32},"in_reply_to":"9fdfeff1_b42f6186","updated":"2019-01-31 08:32:29.000000000","message":"Alright, that warrants another follow up!","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"dcd4262cc1f1211d834b58a36183814aea1020f5","unresolved":false,"context_lines":[{"line_number":1638,"context_line":"    def _sync_power_states(self, context):"},{"line_number":1639,"context_line":"        \"\"\"Periodic task to sync power states for the nodes.\"\"\""},{"line_number":1640,"context_line":"        filters \u003d {\u0027maintenance\u0027: False}"},{"line_number":1641,"context_line":"        nodes \u003d queue.Queue()"},{"line_number":1642,"context_line":"        for node_info in self.iter_nodes(fields\u003d[\u0027id\u0027], filters\u003dfilters):"},{"line_number":1643,"context_line":"            nodes.put(node_info)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        number_of_threads \u003d min(CONF.conductor.sync_power_state_workers,"},{"line_number":1646,"context_line":"                                CONF.conductor.periodic_max_workers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_dc6c0738","line":1643,"range":{"start_line":1641,"start_character":0,"end_line":1643,"end_character":32},"in_reply_to":"9fdfeff1_dad64c28","updated":"2019-01-23 22:41:35.000000000","message":"Would it be a plausible scenario that we encounter a bunch of dead BMCs that won\u0027t be updated (because they are dead). Will we then prioritize the dead ones to get in the way of the live ones?","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ad2306d99111e7ac0681a379fd44d94691e2b7e6","unresolved":false,"context_lines":[{"line_number":1638,"context_line":"    def _sync_power_states(self, context):"},{"line_number":1639,"context_line":"        \"\"\"Periodic task to sync power states for the nodes.\"\"\""},{"line_number":1640,"context_line":"        filters \u003d {\u0027maintenance\u0027: False}"},{"line_number":1641,"context_line":"        nodes \u003d queue.Queue()"},{"line_number":1642,"context_line":"        for node_info in self.iter_nodes(fields\u003d[\u0027id\u0027], filters\u003dfilters):"},{"line_number":1643,"context_line":"            nodes.put(node_info)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        number_of_threads \u003d min(CONF.conductor.sync_power_state_workers,"},{"line_number":1646,"context_line":"                                CONF.conductor.periodic_max_workers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_b42f6186","line":1643,"range":{"start_line":1641,"start_character":0,"end_line":1643,"end_character":32},"in_reply_to":"9fdfeff1_dc6c0738","updated":"2019-01-31 08:29:30.000000000","message":"I think we would end up focusing on the dead ones, as long as we\u0027re not pulling an exclusive lock or doing something that causes last_updated to be changed. That being said, they will also eventually (and hopefully quickly!) end up in maintenance.","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"01d9c7b1117f250089e67b023bcf6338af9c07db","unresolved":false,"context_lines":[{"line_number":1642,"context_line":"        for node_info in self.iter_nodes(fields\u003d[\u0027id\u0027], filters\u003dfilters):"},{"line_number":1643,"context_line":"            nodes.put(node_info)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        number_of_threads \u003d min(CONF.conductor.sync_power_state_workers,"},{"line_number":1646,"context_line":"                                CONF.conductor.periodic_max_workers,"},{"line_number":1647,"context_line":"                                nodes.qsize())"},{"line_number":1648,"context_line":"        futures \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_2cdd0114","line":1645,"updated":"2019-01-22 18:44:27.000000000","message":"nit: number_of_threads \u003d number_of_workers ?","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"ed50940f39bcb9ebe54c3464b5de7680703d7852","unresolved":false,"context_lines":[{"line_number":1642,"context_line":"        for node_info in self.iter_nodes(fields\u003d[\u0027id\u0027], filters\u003dfilters):"},{"line_number":1643,"context_line":"            nodes.put(node_info)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        number_of_threads \u003d min(CONF.conductor.sync_power_state_workers,"},{"line_number":1646,"context_line":"                                CONF.conductor.periodic_max_workers,"},{"line_number":1647,"context_line":"                                nodes.qsize())"},{"line_number":1648,"context_line":"        futures \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_70b98ee7","line":1645,"in_reply_to":"9fdfeff1_2cdd0114","updated":"2019-01-23 10:07:15.000000000","message":"Done in the followup","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"862609d5c64efb6d108386fc78739082e845f48b","unresolved":false,"context_lines":[{"line_number":1642,"context_line":"        for node_info in self.iter_nodes(fields\u003d[\u0027id\u0027], filters\u003dfilters):"},{"line_number":1643,"context_line":"            nodes.put(node_info)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"        number_of_threads \u003d min(CONF.conductor.sync_power_state_workers,"},{"line_number":1646,"context_line":"                                CONF.conductor.periodic_max_workers,"},{"line_number":1647,"context_line":"                                nodes.qsize())"},{"line_number":1648,"context_line":"        futures \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_6a5f5f72","line":1645,"in_reply_to":"9fdfeff1_2cdd0114","updated":"2019-01-23 08:41:46.000000000","message":"Yeah, perhaps workers would be the better word. Let\u0027s see if we get some more feedback to either update or follow up this patch...","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"}],"ironic/conf/conductor.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3197c8a6ee6a1101c87a660bd556aac8a0be7f44","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    cfg.IntOpt(\u0027workers_pool_size\u0027,"},{"line_number":24,"context_line":"               default\u003d100, min\u003d3,"},{"line_number":25,"context_line":"               help\u003d_(\u0027The size of the workers greenthread pool. \u0027"},{"line_number":26,"context_line":"                      \u0027Note that 2 threads will be reserved by the conductor \u0027"},{"line_number":27,"context_line":"                      \u0027itself for handling heart beats and periodic tasks.\u0027)),"},{"line_number":28,"context_line":"    cfg.IntOpt(\u0027heartbeat_interval\u0027,"},{"line_number":29,"context_line":"               default\u003d10,"},{"line_number":30,"context_line":"               help\u003d_(\u0027Seconds between conductor heart beats.\u0027)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_70d0dc51","line":27,"range":{"start_line":26,"start_character":33,"end_line":27,"end_character":74},"updated":"2019-01-21 10:38:16.000000000","message":"This needs an update to take into account the 8 added threads.","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"92a5c6e7bacd7c2c944e45c81a9334845c175eb7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    cfg.IntOpt(\u0027workers_pool_size\u0027,"},{"line_number":24,"context_line":"               default\u003d100, min\u003d3,"},{"line_number":25,"context_line":"               help\u003d_(\u0027The size of the workers greenthread pool. \u0027"},{"line_number":26,"context_line":"                      \u0027Note that 2 threads will be reserved by the conductor \u0027"},{"line_number":27,"context_line":"                      \u0027itself for handling heart beats and periodic tasks.\u0027)),"},{"line_number":28,"context_line":"    cfg.IntOpt(\u0027heartbeat_interval\u0027,"},{"line_number":29,"context_line":"               default\u003d10,"},{"line_number":30,"context_line":"               help\u003d_(\u0027Seconds between conductor heart beats.\u0027)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_2d4c3ac6","line":27,"range":{"start_line":26,"start_character":33,"end_line":27,"end_character":74},"in_reply_to":"9fdfeff1_70d0dc51","updated":"2019-01-21 15:16:36.000000000","message":"Done","commit_id":"55e14e2b015898255d3335d95e8b1e3cd8ef3fcc"},{"author":{"_account_id":11292,"name":"Arne Wiebalck","email":"Arne.Wiebalck@cern.ch","username":"wiebalck"},"change_message_id":"5c00d0438a3d709e45ca6f4037e371527461783f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    cfg.IntOpt(\u0027sync_power_state_workers\u0027,"},{"line_number":80,"context_line":"               default\u003d8, min\u003d1,"},{"line_number":81,"context_line":"               help\u003d_(\u0027The maximum number of workers that can be started \u0027"},{"line_number":82,"context_line":"                      \u0027simultaneously for sync node power state from the \u0027"},{"line_number":83,"context_line":"                      \u0027periodic task.\u0027)),"},{"line_number":84,"context_line":"    cfg.IntOpt(\u0027periodic_max_workers\u0027,"},{"line_number":85,"context_line":"               default\u003d8,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_633813d3","line":82,"range":{"start_line":82,"start_character":38,"end_line":82,"end_character":51},"updated":"2019-01-21 15:48:45.000000000","message":"Nit: s/for sync node/to sync the node/","commit_id":"18d171beb946044e10c0dd72c9b52bfacb9bbdb9"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"f4f23b3617f47ffbdfe1c51d111eaab270ebdfeb","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    cfg.IntOpt(\u0027sync_power_state_workers\u0027,"},{"line_number":80,"context_line":"               default\u003d8, min\u003d1,"},{"line_number":81,"context_line":"               help\u003d_(\u0027The maximum number of workers that can be started \u0027"},{"line_number":82,"context_line":"                      \u0027simultaneously for sync node power state from the \u0027"},{"line_number":83,"context_line":"                      \u0027periodic task.\u0027)),"},{"line_number":84,"context_line":"    cfg.IntOpt(\u0027periodic_max_workers\u0027,"},{"line_number":85,"context_line":"               default\u003d8,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_0391079a","line":82,"range":{"start_line":82,"start_character":38,"end_line":82,"end_character":51},"in_reply_to":"9fdfeff1_633813d3","updated":"2019-01-21 15:52:14.000000000","message":"Done","commit_id":"18d171beb946044e10c0dd72c9b52bfacb9bbdb9"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c69644456f4f607c573535070c465c7a1f632d15","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                      \u0027Note that 2 threads will be reserved by the conductor \u0027"},{"line_number":27,"context_line":"                      \u0027itself for handling heart beats and periodic tasks. \u0027"},{"line_number":28,"context_line":"                      \u0027On top of that, `sync_power_state_workers` will take \u0027"},{"line_number":29,"context_line":"                      \u0027up to 8 green threads by default.\u0027)),"},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027heartbeat_interval\u0027,"},{"line_number":31,"context_line":"               default\u003d10,"},{"line_number":32,"context_line":"               help\u003d_(\u0027Seconds between conductor heart beats.\u0027)),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_e85feee2","line":29,"range":{"start_line":29,"start_character":29,"end_line":29,"end_character":30},"updated":"2019-01-22 11:43:49.000000000","message":"nit: current design would only use 7. Another (small) reason to change!","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"cf3ac94936661a285d287232192f4b44d60d6e4c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                      \u0027Note that 2 threads will be reserved by the conductor \u0027"},{"line_number":27,"context_line":"                      \u0027itself for handling heart beats and periodic tasks. \u0027"},{"line_number":28,"context_line":"                      \u0027On top of that, `sync_power_state_workers` will take \u0027"},{"line_number":29,"context_line":"                      \u0027up to 8 green threads by default.\u0027)),"},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027heartbeat_interval\u0027,"},{"line_number":31,"context_line":"               default\u003d10,"},{"line_number":32,"context_line":"               help\u003d_(\u0027Seconds between conductor heart beats.\u0027)),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_51eede22","line":29,"range":{"start_line":29,"start_character":29,"end_line":29,"end_character":30},"in_reply_to":"9fdfeff1_e85feee2","updated":"2019-01-22 17:32:04.000000000","message":"Done","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"ca521b8347440eee1faec03afb94f913b375aa5e","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                      \u0027in DB\u0027)),"},{"line_number":79,"context_line":"    cfg.IntOpt(\u0027sync_power_state_workers\u0027,"},{"line_number":80,"context_line":"               default\u003d8, min\u003d1,"},{"line_number":81,"context_line":"               help\u003d_(\u0027The maximum number of workers that can be started \u0027"},{"line_number":82,"context_line":"                      \u0027simultaneously to sync nodes power state from the \u0027"},{"line_number":83,"context_line":"                      \u0027periodic task.\u0027)),"},{"line_number":84,"context_line":"    cfg.IntOpt(\u0027periodic_max_workers\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_0a3fb325","line":81,"range":{"start_line":81,"start_character":45,"end_line":81,"end_character":52},"updated":"2019-01-23 08:57:54.000000000","message":"s/ workers / worker threads /","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"ed50940f39bcb9ebe54c3464b5de7680703d7852","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                      \u0027in DB\u0027)),"},{"line_number":79,"context_line":"    cfg.IntOpt(\u0027sync_power_state_workers\u0027,"},{"line_number":80,"context_line":"               default\u003d8, min\u003d1,"},{"line_number":81,"context_line":"               help\u003d_(\u0027The maximum number of workers that can be started \u0027"},{"line_number":82,"context_line":"                      \u0027simultaneously to sync nodes power state from the \u0027"},{"line_number":83,"context_line":"                      \u0027periodic task.\u0027)),"},{"line_number":84,"context_line":"    cfg.IntOpt(\u0027periodic_max_workers\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_5009ea29","line":81,"range":{"start_line":81,"start_character":45,"end_line":81,"end_character":52},"in_reply_to":"9fdfeff1_0a3fb325","updated":"2019-01-23 10:07:15.000000000","message":"Done in the followup","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"}],"ironic/tests/unit/conductor/test_manager.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c69644456f4f607c573535070c465c7a1f632d15","unresolved":false,"context_lines":[{"line_number":6317,"context_line":"@mock.patch.object(waiters, \u0027wait_for_all\u0027,"},{"line_number":6318,"context_line":"                   new\u003dmock.MagicMock(return_value\u003d(0, 0)))"},{"line_number":6319,"context_line":"@mock.patch.object(manager.ConductorManager, \u0027_spawn_worker\u0027,"},{"line_number":6320,"context_line":"                   new\u003dlambda self, fun, *args: fun(*args))"},{"line_number":6321,"context_line":"@mock.patch.object(manager, \u0027do_sync_power_state\u0027)"},{"line_number":6322,"context_line":"@mock.patch.object(task_manager, \u0027acquire\u0027)"},{"line_number":6323,"context_line":"@mock.patch.object(manager.ConductorManager, \u0027_mapped_to_this_conductor\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_286df697","line":6320,"updated":"2019-01-22 11:43:49.000000000","message":"Is there a way we can test the new behaviour a bit more explicitly?","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"cf3ac94936661a285d287232192f4b44d60d6e4c","unresolved":false,"context_lines":[{"line_number":6317,"context_line":"@mock.patch.object(waiters, \u0027wait_for_all\u0027,"},{"line_number":6318,"context_line":"                   new\u003dmock.MagicMock(return_value\u003d(0, 0)))"},{"line_number":6319,"context_line":"@mock.patch.object(manager.ConductorManager, \u0027_spawn_worker\u0027,"},{"line_number":6320,"context_line":"                   new\u003dlambda self, fun, *args: fun(*args))"},{"line_number":6321,"context_line":"@mock.patch.object(manager, \u0027do_sync_power_state\u0027)"},{"line_number":6322,"context_line":"@mock.patch.object(task_manager, \u0027acquire\u0027)"},{"line_number":6323,"context_line":"@mock.patch.object(manager.ConductorManager, \u0027_mapped_to_this_conductor\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_918e8676","line":6320,"in_reply_to":"9fdfeff1_286df697","updated":"2019-01-22 17:32:04.000000000","message":"Done","commit_id":"4d9749b44e1b5f6650fabde04dd93ed86566ef07"}],"releasenotes/notes/add-parallel-power-syncs-b099d66e80aab616.yaml":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"ca521b8347440eee1faec03afb94f913b375aa5e","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Parallelizes periodic power sync calls by running up to"},{"line_number":5,"context_line":"    ``sync_power_state_workers`` simultenously. The default is to run"},{"line_number":6,"context_line":"    up to ``8`` workers."},{"line_number":7,"context_line":"    This change should let larger-scale setups to run power syncs more"},{"line_number":8,"context_line":"    frequently and make the whole power sync procedure more resilient to slow"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_2accf75f","line":5,"range":{"start_line":5,"start_character":6,"end_line":5,"end_character":30},"updated":"2019-01-23 08:57:54.000000000","message":"It need to indicate that sync_power_state_workers is an configuration. May be:\ns/ up to ``sync_power_state_workers`` / up to ironic configuration ``[conductor]/sync_power_state_workers`` /","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"ca521b8347440eee1faec03afb94f913b375aa5e","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Parallelizes periodic power sync calls by running up to"},{"line_number":5,"context_line":"    ``sync_power_state_workers`` simultenously. The default is to run"},{"line_number":6,"context_line":"    up to ``8`` workers."},{"line_number":7,"context_line":"    This change should let larger-scale setups to run power syncs more"},{"line_number":8,"context_line":"    frequently and make the whole power sync procedure more resilient to slow"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_aa09c795","line":5,"range":{"start_line":5,"start_character":33,"end_line":5,"end_character":46},"updated":"2019-01-23 08:57:54.000000000","message":"s/ simultenously /simultaneously /","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"ed50940f39bcb9ebe54c3464b5de7680703d7852","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Parallelizes periodic power sync calls by running up to"},{"line_number":5,"context_line":"    ``sync_power_state_workers`` simultenously. The default is to run"},{"line_number":6,"context_line":"    up to ``8`` workers."},{"line_number":7,"context_line":"    This change should let larger-scale setups to run power syncs more"},{"line_number":8,"context_line":"    frequently and make the whole power sync procedure more resilient to slow"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_7073ceb2","line":5,"range":{"start_line":5,"start_character":6,"end_line":5,"end_character":30},"in_reply_to":"9fdfeff1_2accf75f","updated":"2019-01-23 10:07:15.000000000","message":"Done in the follow up","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"ed50940f39bcb9ebe54c3464b5de7680703d7852","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Parallelizes periodic power sync calls by running up to"},{"line_number":5,"context_line":"    ``sync_power_state_workers`` simultenously. The default is to run"},{"line_number":6,"context_line":"    up to ``8`` workers."},{"line_number":7,"context_line":"    This change should let larger-scale setups to run power syncs more"},{"line_number":8,"context_line":"    frequently and make the whole power sync procedure more resilient to slow"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_106a82b2","line":5,"range":{"start_line":5,"start_character":33,"end_line":5,"end_character":46},"in_reply_to":"9fdfeff1_aa09c795","updated":"2019-01-23 10:07:15.000000000","message":"Done in the followup","commit_id":"7448603ab832294899bb8aba77dc4a8953dbe699"}]}
