)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"0a3cc0fed12a41c3c43bb707f7875841af8d0890","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tiago Mello \u003ctmello@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-06-28 11:06:52 -0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds compute_manager object to ComputeTaskManager constructor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is going to be needed for all migrations to conductor tasks."},{"line_number":10,"context_line":"We patch it separately to reduce conflicts."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAPn%2F%2FhtU%3D","line":7,"updated":"2013-06-28 14:28:24.000000000","message":"conductor_manager, right?","commit_id":"f0f8f1673fd8c3ade1ca1bd14620678856db6bbd"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"279752cbc7d55418bf2f0f7c7f81a13f25ea22d1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tiago Mello \u003ctmello@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-06-28 11:06:52 -0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds compute_manager object to ComputeTaskManager constructor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is going to be needed for all migrations to conductor tasks."},{"line_number":10,"context_line":"We patch it separately to reduce conflicts."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAPn%2F%2Fhrg%3D","line":7,"in_reply_to":"AAAAPn%2F%2FhtU%3D","updated":"2013-06-28 14:32:51.000000000","message":"Yeah!","commit_id":"f0f8f1673fd8c3ade1ca1bd14620678856db6bbd"}],"nova/conductor/api.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"629b981fc17466d7d350c6f29713373a2da37316","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # other/future users of this sort of functionality."},{"line_number":54,"context_line":"        parent \u003d manager.ConductorManager()"},{"line_number":55,"context_line":"        self._manager \u003d utils.ExceptionHelper("},{"line_number":56,"context_line":"                manager.ConductorManager(parent))"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def wait_until_ready(self, context, *args, **kwargs):"},{"line_number":59,"context_line":"        # nothing to wait for in the local case."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fh54%3D","line":56,"updated":"2013-06-28 13:30:58.000000000","message":"Don\u0027t need to update this one.  You passed ConductorManager to ConductorManager :)","commit_id":"b17103b7e84c2cdf831b30f45b066f97be0cc743"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"629b981fc17466d7d350c6f29713373a2da37316","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        # other/future users of this sort of functionality."},{"line_number":348,"context_line":"        parent \u003d manager.ConductorManager()"},{"line_number":349,"context_line":"        self._manager \u003d utils.ExceptionHelper("},{"line_number":350,"context_line":"                manager.ComputeTaskManager(parent))"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":353,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fh5k%3D","line":350,"updated":"2013-06-28 13:30:58.000000000","message":"I would skip the parent variable, just declare manager.ComputeTaskManager(manager.ConductorManager())","commit_id":"b17103b7e84c2cdf831b30f45b066f97be0cc743"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"f3e53185e05b665d7452853f869bb1f60f644d35","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        # TODO(danms): This needs to be something more generic for"},{"line_number":345,"context_line":"        # other/future users of this sort of functionality."},{"line_number":346,"context_line":"        self._manager \u003d utils.ExceptionHelper("},{"line_number":347,"context_line":"            manager.ComputeTaskManager(manager.ConductorManager()))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":350,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2Fhno%3D","line":347,"updated":"2013-06-28 14:50:49.000000000","message":"What\u0027s the value in passing it in as an arg?  It could just instantiate one itself internally.","commit_id":"ed5442de5544b2e015cba30aad886e38669bce6d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"00fd7ad92a0434bc1905789389d28e0f04ebacd7","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        # TODO(danms): This needs to be something more generic for"},{"line_number":345,"context_line":"        # other/future users of this sort of functionality."},{"line_number":346,"context_line":"        self._manager \u003d utils.ExceptionHelper("},{"line_number":347,"context_line":"            manager.ComputeTaskManager(manager.ConductorManager()))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":350,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FWzI%3D","line":347,"in_reply_to":"AAAAPn%2F%2FXXw%3D","updated":"2013-07-03 13:07:48.000000000","message":"I\u0027m not against this change if it has benefits.  I guess what I\u0027d like to know is what is this providing exactly.  I could use this change as well but for me it was enough to change ComputeTaskManager to inherit from base.Base rather than object in order to get db access.  But I am not sure what your use case is.","commit_id":"ed5442de5544b2e015cba30aad886e38669bce6d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5e883dd0375e156ebf6ce0f08b5d3d8a4587d5f4","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        # TODO(danms): This needs to be something more generic for"},{"line_number":345,"context_line":"        # other/future users of this sort of functionality."},{"line_number":346,"context_line":"        self._manager \u003d utils.ExceptionHelper("},{"line_number":347,"context_line":"            manager.ComputeTaskManager(manager.ConductorManager()))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":350,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FXXw%3D","line":347,"in_reply_to":"AAAAPn%2F%2Fhec%3D","updated":"2013-07-03 08:40:25.000000000","message":"Maybe that is better, but it does make it harder to move the code. That could be a clean up later on?","commit_id":"ed5442de5544b2e015cba30aad886e38669bce6d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ee89f8d3ed063589269d212db4e29c0e860d8f75","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        # TODO(danms): This needs to be something more generic for"},{"line_number":345,"context_line":"        # other/future users of this sort of functionality."},{"line_number":346,"context_line":"        self._manager \u003d utils.ExceptionHelper("},{"line_number":347,"context_line":"            manager.ComputeTaskManager(manager.ConductorManager()))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":350,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2Fhec%3D","line":347,"in_reply_to":"AAAAPn%2F%2FhlI%3D","updated":"2013-06-28 15:27:04.000000000","message":"I know that in my case I don\u0027t actually need the conductor, I just didn\u0027t want to duplicate db access and wanted to use the extra logic already in conductor like in instance_update().  Maybe ComputeTaskManager should just do direct db access and we can split out logic from things like instance_update into utility methods to share logic.","commit_id":"ed5442de5544b2e015cba30aad886e38669bce6d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"620a9e084637f5fd670f60e4727818287b39eb46","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        # TODO(danms): This needs to be something more generic for"},{"line_number":345,"context_line":"        # other/future users of this sort of functionality."},{"line_number":346,"context_line":"        self._manager \u003d utils.ExceptionHelper("},{"line_number":347,"context_line":"            manager.ComputeTaskManager(manager.ConductorManager()))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":350,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FhlI%3D","line":347,"in_reply_to":"AAAAPn%2F%2FhmM%3D","updated":"2013-06-28 15:00:41.000000000","message":"Ah yes, I remember this damm mess now. Unfortunately some of the task code needs a conductor. Seems silly to do that over rpc just for dependency reasons.","commit_id":"ed5442de5544b2e015cba30aad886e38669bce6d"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"66067fb09ab016044972221641735f3bf91ecd20","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        # TODO(danms): This needs to be something more generic for"},{"line_number":345,"context_line":"        # other/future users of this sort of functionality."},{"line_number":346,"context_line":"        self._manager \u003d utils.ExceptionHelper("},{"line_number":347,"context_line":"            manager.ComputeTaskManager(manager.ConductorManager()))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":350,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2Fhmw%3D","line":347,"in_reply_to":"AAAAPn%2F%2Fhno%3D","updated":"2013-06-28 14:54:44.000000000","message":"I think the idea was to use the \u0027same\u0027 object and not having a different instance? I think John can help on answering that.","commit_id":"ed5442de5544b2e015cba30aad886e38669bce6d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"76629960811dc8e0d499021f155d0c88e4a978c4","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        # TODO(danms): This needs to be something more generic for"},{"line_number":345,"context_line":"        # other/future users of this sort of functionality."},{"line_number":346,"context_line":"        self._manager \u003d utils.ExceptionHelper("},{"line_number":347,"context_line":"            manager.ComputeTaskManager(manager.ConductorManager()))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":350,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FhmM%3D","line":347,"in_reply_to":"AAAAPn%2F%2Fhno%3D","updated":"2013-06-28 14:57:31.000000000","message":"Unfortunately it causes a loop because the ConductorManager instantiates ComputeTaskManager for the RPC dispatching.  It could potentially be worked out with the \u0027late instantiation in a property\u0027 trick though.  Maybe that will be better.\n\nI was against this on one of Johns patches until I hit a recursion limit in my own patch where I instantiated it in ComputeTaskManager :(","commit_id":"ed5442de5544b2e015cba30aad886e38669bce6d"}],"nova/tests/conductor/test_conductor.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"629b981fc17466d7d350c6f29713373a2da37316","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"    def setUp(self):"},{"line_number":1276,"context_line":"        super(ConductorTaskTestCase, self).setUp()"},{"line_number":1277,"context_line":"        parent \u003d conductor_manager.ConductorManager()"},{"line_number":1278,"context_line":"        self.conductor \u003d conductor_manager.ComputeTaskManager(parent)"},{"line_number":1279,"context_line":"        self.conductor_manager \u003d self.conductor"},{"line_number":1280,"context_line":""},{"line_number":1281,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fh5Y%3D","line":1278,"updated":"2013-06-28 13:30:58.000000000","message":"Same inline declaration can be used.","commit_id":"b17103b7e84c2cdf831b30f45b066f97be0cc743"}]}
