)]}'
{"ironic/conductor/manager.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"c0ae94d38bb191ed6161c03cd732ec24e23cb331","unresolved":false,"context_lines":[{"line_number":654,"context_line":"                # we expect the state to have flipped to something else and"},{"line_number":655,"context_line":"                # then back to DEPLOYWAIT between the call to"},{"line_number":656,"context_line":"                # get_nodeinfo_list and now."},{"line_number":657,"context_line":"                if node.provision_state !\u003d states.DEPLOYWAIT:"},{"line_number":658,"context_line":"                    task.release_resources()"},{"line_number":659,"context_line":"                    continue"},{"line_number":660,"context_line":"                node.provision_state \u003d states.DEPLOYFAIL"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FhOo%3D","line":657,"updated":"2014-04-20 17:39:41.000000000","message":"Maybe this should also re-check maintenance mode..","commit_id":"7c8dd07cca2d5fccde850ba677ec00ec4e398cb6"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b9322b4b38ced09a6f15dabca0f47118f909abfb","unresolved":false,"context_lines":[{"line_number":667,"context_line":"                node.save(context)"},{"line_number":668,"context_line":"                thread \u003d self._spawn_worker(utils.cleanup_after_timeout, task)"},{"line_number":669,"context_line":"                thread.link(lambda t: task.release_resources())"},{"line_number":670,"context_line":"            except exception.NoFreeConductorWorker:"},{"line_number":671,"context_line":"                task.release_resources()"},{"line_number":672,"context_line":"            except Exception:"},{"line_number":673,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FXrE%3D","line":670,"updated":"2014-04-22 09:07:42.000000000","message":"If NoFreeConductorWorker raises node can not be cleaned on next pass because has states.DEPLOYFAIL already. IMO should be rebased on https://review.openstack.org/78651 (fix this and bug #1285793 also).","commit_id":"1bdb96a1ab3b65557f30a8573ab3f7c1e999e394"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"97bd71d0dfbbad2dbced16b835c5399f6cd230f3","unresolved":false,"context_lines":[{"line_number":667,"context_line":"                node.save(context)"},{"line_number":668,"context_line":"                thread \u003d self._spawn_worker(utils.cleanup_after_timeout, task)"},{"line_number":669,"context_line":"                thread.link(lambda t: task.release_resources())"},{"line_number":670,"context_line":"            except exception.NoFreeConductorWorker:"},{"line_number":671,"context_line":"                task.release_resources()"},{"line_number":672,"context_line":"            except Exception:"},{"line_number":673,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FONw%3D","line":670,"in_reply_to":"AAAAXH%2F%2FXrE%3D","updated":"2014-04-23 08:28:24.000000000","message":"I am just preserving the (broken) behavior here... one of us will have a conflict depending on who merges first, so it\u0027s really not necessary to rebase on the other patch. But I have a patch in front of this one that needs a fix, so I\u0027ll go ahead and do it before pushing up the new versions.\n\nThanks for the heads up.","commit_id":"1bdb96a1ab3b65557f30a8573ab3f7c1e999e394"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"70a3427d96747e84b4d4f5e4af51de38809cc128","unresolved":false,"context_lines":[{"line_number":596,"context_line":"        if not callback_timeout:"},{"line_number":597,"context_line":"            return"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        filters \u003d {\u0027reserved\u0027: False, \u0027provision_state\u0027: states.DEPLOYWAIT,"},{"line_number":600,"context_line":"                   \u0027maintenance\u0027: False,"},{"line_number":601,"context_line":"                   \u0027provisioned_before\u0027: callback_timeout}"},{"line_number":602,"context_line":"        columns \u003d [\u0027uuid\u0027, \u0027driver\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2F1Ks%3D","line":599,"updated":"2014-04-25 22:58:26.000000000","message":"tiny nit -- aligning and sorting all four options would be more readable.","commit_id":"3bf24c360946f3bc09b195e12da8294a2db180d6"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"5d7c209b09117552805c57150403bd0c2e5cb2fb","unresolved":false,"context_lines":[{"line_number":596,"context_line":"        if not callback_timeout:"},{"line_number":597,"context_line":"            return"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        filters \u003d {\u0027reserved\u0027: False, \u0027provision_state\u0027: states.DEPLOYWAIT,"},{"line_number":600,"context_line":"                   \u0027maintenance\u0027: False,"},{"line_number":601,"context_line":"                   \u0027provisioned_before\u0027: callback_timeout}"},{"line_number":602,"context_line":"        columns \u003d [\u0027uuid\u0027, \u0027driver\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2FxQw%3D","line":599,"in_reply_to":"AAAAXX%2F%2F1Ks%3D","updated":"2014-04-28 04:29:52.000000000","message":"Agree.","commit_id":"3bf24c360946f3bc09b195e12da8294a2db180d6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"70a3427d96747e84b4d4f5e4af51de38809cc128","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                    task.spawn_after(self._spawn_worker,"},{"line_number":624,"context_line":"                                     utils.cleanup_after_timeout, task)"},{"line_number":625,"context_line":"            except (exception.NodeLocked, exception.NodeNotFound,"},{"line_number":626,"context_line":"                    exception.NoFreeConductorWorker):"},{"line_number":627,"context_line":"                continue"},{"line_number":628,"context_line":"            workers_count +\u003d 1"},{"line_number":629,"context_line":"            if workers_count \u003d\u003d CONF.conductor.periodic_max_workers:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2F1KQ%3D","line":626,"updated":"2014-04-25 22:58:26.000000000","message":"I just noticed that this is wrong.\n\nIf exception.NoFreeConductorWorker, we should exit the for loop, not keep retrying (since it\u0027s likely to hit the same exception on the next iteration, and so on).","commit_id":"3bf24c360946f3bc09b195e12da8294a2db180d6"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"5d7c209b09117552805c57150403bd0c2e5cb2fb","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                    task.spawn_after(self._spawn_worker,"},{"line_number":624,"context_line":"                                     utils.cleanup_after_timeout, task)"},{"line_number":625,"context_line":"            except (exception.NodeLocked, exception.NodeNotFound,"},{"line_number":626,"context_line":"                    exception.NoFreeConductorWorker):"},{"line_number":627,"context_line":"                continue"},{"line_number":628,"context_line":"            workers_count +\u003d 1"},{"line_number":629,"context_line":"            if workers_count \u003d\u003d CONF.conductor.periodic_max_workers:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAXX%2F%2FxQ0%3D","line":626,"in_reply_to":"AAAAXX%2F%2F1KQ%3D","updated":"2014-04-28 04:29:52.000000000","message":"Yeah. I\u0027m not really a huge fan of this \u0027periodic_max_workers\u0027 hack.  I feel like maybe this periodic task should just try to use 1 worker, if available, and do the looping inside of it. I\u0027m going to make this change, and if it\u0027s not popular, I\u0027ll change this back to just return on NoFreeConductorWorker.","commit_id":"3bf24c360946f3bc09b195e12da8294a2db180d6"}],"ironic/tests/conductor/test_manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d3a72785380f67862de458c216059dc968982256","unresolved":false,"context_lines":[{"line_number":43,"context_line":"CONF \u003d cfg.CONF"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def _get_acquire_side_effect(test_inst, task_infos):"},{"line_number":47,"context_line":"    \"\"\"Helper method to generate a task_manager.acquire() side effect."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    test_inst is the TestCase instantiation."}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_f406071b","line":46,"updated":"2014-06-20 12:12:01.000000000","message":"I don\u0027t quite get why you moved it out of test instance (you can use a mix-in, if you want to reuse in several test cases). First argument is definitely \"self\" :)","commit_id":"0db4660d549bf1dc6643d5eb64e6ec6289603f28"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c872e0f1c1b7045621139612ed1025f17c1da380","unresolved":false,"context_lines":[{"line_number":43,"context_line":"CONF \u003d cfg.CONF"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def _get_acquire_side_effect(test_inst, task_infos):"},{"line_number":47,"context_line":"    \"\"\"Helper method to generate a task_manager.acquire() side effect."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    test_inst is the TestCase instantiation."}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_ad2c3203","line":46,"in_reply_to":"1ae5cdf2_f406071b","updated":"2014-06-20 13:36:49.000000000","message":"+1 agreed. It seems that it would be better to create a base class with this method in it and then just inherit from it (multiple inheritance :) )","commit_id":"0db4660d549bf1dc6643d5eb64e6ec6289603f28"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ff20acea58076ffd45ab3af64e3e2171832596f5","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            # a helper, however it\u0027s the cleanest way"},{"line_number":94,"context_line":"            # to verify we\u0027re dealing with the correct task/node."},{"line_number":95,"context_line":"            if ironic_utils.is_int_like(self.node_id):"},{"line_number":96,"context_line":"                test_inst.assertEqual(self.node_id, task.node.id)"},{"line_number":97,"context_line":"            else:"},{"line_number":98,"context_line":"                test_inst.assertEqual(self.node_id, task.node.uuid)"},{"line_number":99,"context_line":"            return task"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_a62c7094","line":96,"updated":"2014-06-19 18:22:14.000000000","message":"I guess order should be different here: self.assertEqual(expected, actual)","commit_id":"0db4660d549bf1dc6643d5eb64e6ec6289603f28"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"c1ec96999752869f936a902743f73748b097e535","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            # a helper, however it\u0027s the cleanest way"},{"line_number":94,"context_line":"            # to verify we\u0027re dealing with the correct task/node."},{"line_number":95,"context_line":"            if ironic_utils.is_int_like(self.node_id):"},{"line_number":96,"context_line":"                test_inst.assertEqual(self.node_id, task.node.id)"},{"line_number":97,"context_line":"            else:"},{"line_number":98,"context_line":"                test_inst.assertEqual(self.node_id, task.node.uuid)"},{"line_number":99,"context_line":"            return task"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_6d6bf3b8","line":96,"in_reply_to":"1ae5cdf2_a62c7094","updated":"2014-06-21 18:15:49.000000000","message":"This is kind of confusing, but I\u0027m testing that \u0027task.node\u0027 is what I expect it to be... so this is correct.","commit_id":"0db4660d549bf1dc6643d5eb64e6ec6289603f28"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ff20acea58076ffd45ab3af64e3e2171832596f5","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            if ironic_utils.is_int_like(self.node_id):"},{"line_number":96,"context_line":"                test_inst.assertEqual(self.node_id, task.node.id)"},{"line_number":97,"context_line":"            else:"},{"line_number":98,"context_line":"                test_inst.assertEqual(self.node_id, task.node.uuid)"},{"line_number":99,"context_line":"            return task"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        def __exit__(self, exc_typ, exc_val, exc_tb):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_c64edc6e","line":98,"updated":"2014-06-19 18:22:14.000000000","message":"ditto","commit_id":"0db4660d549bf1dc6643d5eb64e6ec6289603f28"}]}
