)]}'
{"nova/compute/api.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"6ce74aa7fd90bfd280f015ae9efcd64f07d4a040","unresolved":false,"context_lines":[{"line_number":2115,"context_line":"                task_state\u003dtask_states.RESIZE_PREP,"},{"line_number":2116,"context_line":"                expected_task_state\u003dNone,"},{"line_number":2117,"context_line":"                progress\u003d0, **kwargs)"},{"line_number":2118,"context_line":""},{"line_number":2119,"context_line":"        request_spec \u003d {"},{"line_number":2120,"context_line":"                \u0027instance_type\u0027: new_instance_type,"},{"line_number":2121,"context_line":"                \u0027instance_uuids\u0027: [instance[\u0027uuid\u0027]],"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPX%2F%2FpBY%3D","line":2118,"updated":"2013-06-13 17:34:30.000000000","message":"I recently ripped building the request_spec out of this layer and moved it to conductor for build_instances.  While I would prefer that I don\u0027t think it\u0027s really a big deal.  But I will ask if you could use the scheduler/utils.py build_request_spec function, just to get some uniformity around what\u0027s expected to be in a request_spec.","commit_id":"d17a6447151c996a93f6fd52cc0c7746ece9163b"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"6ce74aa7fd90bfd280f015ae9efcd64f07d4a040","unresolved":false,"context_lines":[{"line_number":2141,"context_line":""},{"line_number":2142,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties,"},{"line_number":2143,"context_line":"                          \u0027image\u0027: image,"},{"line_number":2144,"context_line":"                          \u0027reservations\u0027: reservations,"},{"line_number":2145,"context_line":"                          \u0027request_spec\u0027: request_spec}"},{"line_number":2146,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2147,"context_line":"                scheduler_hint\u003dscheduler_hint,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPX%2F%2FpBM%3D","line":2144,"updated":"2013-06-13 17:34:30.000000000","message":"I know that currently image and reservations are passed to the scheduler because they\u0027re then passed on the the compute.  But if they\u0027re not actually used by the scheduler for filtering decisions I would prefer them to not be packed into scheduler_hint.","commit_id":"d17a6447151c996a93f6fd52cc0c7746ece9163b"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0dd53d0b46a254d49d1c51f528b8990cae5cedff","unresolved":false,"context_lines":[{"line_number":2115,"context_line":"            filter_properties[\u0027ignore_hosts\u0027].append(instance[\u0027host\u0027])"},{"line_number":2116,"context_line":""},{"line_number":2117,"context_line":"        # NOTE(timello): we commit reservations immediately regardless if"},{"line_number":2118,"context_line":"        # it is with cells or not. We uncommit it in event of failure later."},{"line_number":2119,"context_line":"        if reservations:"},{"line_number":2120,"context_line":"            QUOTAS.commit(context, reservations,"},{"line_number":2121,"context_line":"                          project_id\u003dinstance[\u0027project_id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2F51w%3D","line":2118,"updated":"2013-06-18 16:58:15.000000000","message":"It looks to me that uncommitting isn\u0027t going to work because you set reservations to an empty list later.  So you don\u0027t know how much to uncommit later.","commit_id":"5506f5f41666ced419654f8e7d662d2962b3f4ee"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"9ecab0745f139add2023c487909fe7a80536ee23","unresolved":false,"context_lines":[{"line_number":2137,"context_line":""},{"line_number":2138,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2139,"context_line":""},{"line_number":2140,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2141,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2142,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2143,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2Fnr8%3D","line":2140,"updated":"2013-06-26 15:55:17.000000000","message":"What about add migration type to filter_properties? Since now both code and live migration call migrate_server, it would be good if we add migration type to filter_properties if some 3rd parties want to check if this is code or live migration.","commit_id":"d45efbef11228cfe2b3285a224921cc455d604e3"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"d0ba9bddeae3799ef3c1158e0afa5f7acdec8848","unresolved":false,"context_lines":[{"line_number":2137,"context_line":""},{"line_number":2138,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2139,"context_line":""},{"line_number":2140,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2141,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2142,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2143,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2FmXw%3D","line":2140,"in_reply_to":"AAAAPn%2F%2Fnf4%3D","updated":"2013-06-26 23:35:03.000000000","message":"OK, agree to handle this in a new patch. Thanks.","commit_id":"d45efbef11228cfe2b3285a224921cc455d604e3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9a1bfb0e4aa15b046c1b826abb0295154ec86590","unresolved":false,"context_lines":[{"line_number":2137,"context_line":""},{"line_number":2138,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2139,"context_line":""},{"line_number":2140,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2141,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2142,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2143,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2Fnf4%3D","line":2140,"in_reply_to":"AAAAPn%2F%2FnhQ%3D","updated":"2013-06-26 16:58:23.000000000","message":"I agree that this change should be in a separate patch if it\u0027s desired.  And really should have a filter that\u0027s using it before it\u0027s added.  The nice thing about filter_properties is that things can be added later without affecting RPC versioning if it becomes useful.","commit_id":"d45efbef11228cfe2b3285a224921cc455d604e3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f9de20f2b1a414a288a0badefed2359b43f29720","unresolved":false,"context_lines":[{"line_number":2137,"context_line":""},{"line_number":2138,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2139,"context_line":""},{"line_number":2140,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2141,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2142,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2143,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2Fngg%3D","line":2140,"in_reply_to":"AAAAPn%2F%2FnhQ%3D","updated":"2013-06-26 16:56:00.000000000","message":"Seems like a separate patch to me.","commit_id":"d45efbef11228cfe2b3285a224921cc455d604e3"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"1a41ff97efc274ae769626f703b53439d44b2222","unresolved":false,"context_lines":[{"line_number":2137,"context_line":""},{"line_number":2138,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2139,"context_line":""},{"line_number":2140,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2141,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2142,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2143,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2FnhQ%3D","line":2140,"in_reply_to":"AAAAPn%2F%2Fnkw%3D","updated":"2013-06-26 16:53:25.000000000","message":"This is not done even today right? I think we could handle that in a different patch, since it looks like a new feature, what do you think? I\u0027m not sure this is the right thing to do, maybe other folks can comment about that.","commit_id":"d45efbef11228cfe2b3285a224921cc455d604e3"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"752b6cb506be211a4a4d567d058d24c08bbbeb91","unresolved":false,"context_lines":[{"line_number":2137,"context_line":""},{"line_number":2138,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2139,"context_line":""},{"line_number":2140,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2141,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2142,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2143,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2Fnkw%3D","line":2140,"in_reply_to":"AAAAPn%2F%2Fnlw%3D","updated":"2013-06-26 16:37:01.000000000","message":"Yes, I mean in scheduler driver, such as filter_scheduler.py, chance.py, user defined scheduler driver, when migrate_server call select_hosts to get target host, some user defined scheduler driver might want to get migration type from filter_property or request_spec.\n\ndef select_hosts(self, context, request_spec, filter_properties):\n        \"\"\"Selects a filtered set of hosts.\"\"\"\n        instance_uuids \u003d request_spec.get(\u0027instance_uuids\u0027)\n        hosts \u003d [host.obj.host for host in self._schedule(context,\n            request_spec, filter_properties, instance_uuids)]\n        if not hosts:\n            raise exception.NoValidHost(reason\u003d\"\")\n        return hosts","commit_id":"d45efbef11228cfe2b3285a224921cc455d604e3"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"1c14f62db6650b9e7cc87d28a805df2b1f737b92","unresolved":false,"context_lines":[{"line_number":2137,"context_line":""},{"line_number":2138,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2139,"context_line":""},{"line_number":2140,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2141,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2142,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2143,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2Fnlw%3D","line":2140,"in_reply_to":"AAAAPn%2F%2Fnr8%3D","updated":"2013-06-26 16:31:42.000000000","message":"This is done via parameters below, I\u0027m not sure I got what you are talking about. filter_properties is used by the scheduler drivers to filter out hosts/nodes for the migration, right? How putting \u0027migration type\u0027 would help 3rd parties?","commit_id":"d45efbef11228cfe2b3285a224921cc455d604e3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c144dff303898d4e1ee487a39d56267fc8e48eb","unresolved":false,"context_lines":[{"line_number":2103,"context_line":"        deltas \u003d self._upsize_quota_delta(context, new_instance_type,"},{"line_number":2104,"context_line":"                                          current_instance_type)"},{"line_number":2105,"context_line":"        try:"},{"line_number":2106,"context_line":"            reservations \u003d self._reserve_quota_delta(context, deltas,"},{"line_number":2107,"context_line":"                                                     project_id\u003dinstance["},{"line_number":2108,"context_line":"                                                         \u0027project_id\u0027])"},{"line_number":2109,"context_line":"        except exception.OverQuota as exc:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2Fukg%3D","line":2106,"updated":"2013-07-12 10:19:34.000000000","message":"I wonder if this should live in the conductor, because it makes a \"change\" to the system. The others are just checks. Should make the code to revert the need for the reservation (if it fails, etc) easier to see.\n\nThat would stop the need to extend the migrate interface, which I don\u0027t really have a problem with, just wondering.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"7052db201e9636d6140d21cd39be40831cd28d71","unresolved":false,"context_lines":[{"line_number":2103,"context_line":"        deltas \u003d self._upsize_quota_delta(context, new_instance_type,"},{"line_number":2104,"context_line":"                                          current_instance_type)"},{"line_number":2105,"context_line":"        try:"},{"line_number":2106,"context_line":"            reservations \u003d self._reserve_quota_delta(context, deltas,"},{"line_number":2107,"context_line":"                                                     project_id\u003dinstance["},{"line_number":2108,"context_line":"                                                         \u0027project_id\u0027])"},{"line_number":2109,"context_line":"        except exception.OverQuota as exc:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FpFQ%3D","line":2106,"in_reply_to":"AAAAP3%2F%2Fukg%3D","updated":"2013-07-15 14:21:59.000000000","message":"The problem with this is that once we have reserved the quota we have to commit it immediately if we are using compute cells... and that depends on the CONF.cells.enable option which I don\u0027t think we should be reading it from the conductor... So I thought it was going to add much more changes to workaround it by now.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c144dff303898d4e1ee487a39d56267fc8e48eb","unresolved":false,"context_lines":[{"line_number":2151,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2152,"context_line":""},{"line_number":2153,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2154,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2155,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2156,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"},{"line_number":2157,"context_line":"                block_migration\u003dNone, disk_over_commit\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FulI%3D","line":2154,"updated":"2013-07-12 10:19:34.000000000","message":"We are changing from the prep_resize (cast) to a call (migrate_server).\n\nJust making sure we are OK with that.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"7052db201e9636d6140d21cd39be40831cd28d71","unresolved":false,"context_lines":[{"line_number":2151,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2152,"context_line":""},{"line_number":2153,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2154,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2155,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2156,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"},{"line_number":2157,"context_line":"                block_migration\u003dNone, disk_over_commit\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FpDw%3D","line":2154,"in_reply_to":"AAAAP3%2F%2FulI%3D","updated":"2013-07-15 14:21:59.000000000","message":"Yes. Although I don\u0027t any problem with that.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c144dff303898d4e1ee487a39d56267fc8e48eb","unresolved":false,"context_lines":[{"line_number":2155,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2156,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"},{"line_number":2157,"context_line":"                block_migration\u003dNone, disk_over_commit\u003dNone,"},{"line_number":2158,"context_line":"                reservations\u003dreservations)"},{"line_number":2159,"context_line":""},{"line_number":2160,"context_line":"    @wrap_check_policy"},{"line_number":2161,"context_line":"    @check_instance_lock"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FukU%3D","line":2158,"updated":"2013-07-12 10:19:34.000000000","message":"I can\u0027t see a test for this change, which worries me a bit. Is it covered by unit tests cause its used the local method call, etc?","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"7052db201e9636d6140d21cd39be40831cd28d71","unresolved":false,"context_lines":[{"line_number":2155,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2156,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"},{"line_number":2157,"context_line":"                block_migration\u003dNone, disk_over_commit\u003dNone,"},{"line_number":2158,"context_line":"                reservations\u003dreservations)"},{"line_number":2159,"context_line":""},{"line_number":2160,"context_line":"    @wrap_check_policy"},{"line_number":2161,"context_line":"    @check_instance_lock"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FpBA%3D","line":2158,"in_reply_to":"AAAAP3%2F%2FukU%3D","updated":"2013-07-15 14:21:59.000000000","message":"As far I can see, it is not used for local method calls... the method is only called by the admin_actions migrate api call.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"be599234c4d594e6063cfc1ec29ac6a7fd206168","unresolved":false,"context_lines":[{"line_number":2214,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2215,"context_line":""},{"line_number":2216,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2217,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2218,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2219,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"},{"line_number":2220,"context_line":"                block_migration\u003dNone, disk_over_commit\u003dNone,"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAQn%2F%2F5%2Bk%3D","line":2217,"updated":"2013-07-19 13:41:38.000000000","message":"might be good to have more tests around this call? or is it already covered, maybe I have asked this before?","commit_id":"a1d554de391bfd33ad4b9dea0399efcbd038dca6"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b0e343d1641732ee0db959e6c193e9eed5a5a456","unresolved":false,"context_lines":[{"line_number":2214,"context_line":"        self._record_action_start(context, instance, instance_actions.RESIZE)"},{"line_number":2215,"context_line":""},{"line_number":2216,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2217,"context_line":"        self.compute_task_api.migrate_server(context, instance,"},{"line_number":2218,"context_line":"                scheduler_hint\u003dscheduler_hint,"},{"line_number":2219,"context_line":"                live\u003dFalse, rebuild\u003dFalse, flavor\u003dnew_instance_type,"},{"line_number":2220,"context_line":"                block_migration\u003dNone, disk_over_commit\u003dNone,"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAQn%2F%2F5IQ%3D","line":2217,"in_reply_to":"AAAAQn%2F%2F5%2Bk%3D","updated":"2013-07-19 17:24:42.000000000","message":"Agreed.  This seems like something you shouldn\u0027t be able to change without breaking a test.  So some additional testing seems warranted.","commit_id":"a1d554de391bfd33ad4b9dea0399efcbd038dca6"}],"nova/conductor/api.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"6fa41a30c8982af679f53dd4fbcbd073b2d14f91","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                manager.ComputeTaskManager())"},{"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, reservations, block_migration, disk_over_commit):"},{"line_number":351,"context_line":"        return self._manager.migrate_server("},{"line_number":352,"context_line":"            context, instance, scheduler_hint, live, rebuild, flavor,"},{"line_number":353,"context_line":"            reservations, block_migration, disk_over_commit)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPn%2F%2FtNQ%3D","line":350,"updated":"2013-06-24 21:07:28.000000000","message":"If you also move reservations to the end here and default to None it will save updating some test methods and other callers.","commit_id":"bab8e2eb08891c9d33562ed26d502f73473e9fc3"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b0e343d1641732ee0db959e6c193e9eed5a5a456","unresolved":false,"context_lines":[{"line_number":353,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":354,"context_line":"                  flavor, block_migration, disk_over_commit,"},{"line_number":355,"context_line":"                  reservations\u003dNone):"},{"line_number":356,"context_line":"        return self._manager.migrate_server("},{"line_number":357,"context_line":"            context, instance, scheduler_hint, live, rebuild, flavor,"},{"line_number":358,"context_line":"            block_migration, disk_over_commit, reservations)"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAQn%2F%2F5Io%3D","line":356,"updated":"2013-07-19 17:24:42.000000000","message":"This shouldn\u0027t return.  And at some point you\u0027ll want to use spawn_n(), but that can come in a later change.","commit_id":"a1d554de391bfd33ad4b9dea0399efcbd038dca6"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b0e343d1641732ee0db959e6c193e9eed5a5a456","unresolved":false,"context_lines":[{"line_number":425,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":426,"context_line":"                  flavor, block_migration, disk_over_commit,"},{"line_number":427,"context_line":"                  reservations\u003dNone):"},{"line_number":428,"context_line":"        return self.conductor_compute_rpcapi.migrate_server("},{"line_number":429,"context_line":"            context, instance, scheduler_hint, live, rebuild,"},{"line_number":430,"context_line":"            flavor, block_migration, disk_over_commit, reservations)"},{"line_number":431,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAQn%2F%2F5Ik%3D","line":428,"updated":"2013-07-19 17:24:42.000000000","message":"Same here, no return.","commit_id":"a1d554de391bfd33ad4b9dea0399efcbd038dca6"}],"nova/conductor/manager.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"b5b346d91586b9ac154413206daf7f8b4ea81fff","unresolved":false,"context_lines":[{"line_number":534,"context_line":"            destination \u003d scheduler_hint.get(\"host\")"},{"line_number":535,"context_line":"            self.scheduler_rpcapi.live_migration(context, block_migration,"},{"line_number":536,"context_line":"                    disk_over_commit, instance, destination)"},{"line_number":537,"context_line":"        elif flavor and not live:"},{"line_number":538,"context_line":"            request_spec_p \u003d jsonutils.to_primitive("},{"line_number":539,"context_line":"                    scheduler_hint[\u0027request_spec\u0027])"},{"line_number":540,"context_line":"            args \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F2Nk%3D","line":537,"updated":"2013-06-07 17:17:06.000000000","message":"and not live is superfluous here since you tested for live above","commit_id":"253eabbb8a1da2892f6ebd96dc1f5ee5007699ef"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"6eef442ce57cb7639610206d74e1074d9dcb4d40","unresolved":false,"context_lines":[{"line_number":534,"context_line":"            destination \u003d scheduler_hint.get(\"host\")"},{"line_number":535,"context_line":"            self.scheduler_rpcapi.live_migration(context, block_migration,"},{"line_number":536,"context_line":"                    disk_over_commit, instance, destination)"},{"line_number":537,"context_line":"        elif flavor and not live:"},{"line_number":538,"context_line":"            request_spec_p \u003d jsonutils.to_primitive("},{"line_number":539,"context_line":"                    scheduler_hint[\u0027request_spec\u0027])"},{"line_number":540,"context_line":"            args \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F2M8%3D","line":537,"in_reply_to":"AAAAPX%2F%2F2Nk%3D","updated":"2013-06-07 17:19:20.000000000","message":"Indeed. Thanks!","commit_id":"253eabbb8a1da2892f6ebd96dc1f5ee5007699ef"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1f0d1a23690ad1b524eca42fcb9cc9ed42f6e578","unresolved":false,"context_lines":[{"line_number":534,"context_line":"                                  exception.MigrationPreCheckError)"},{"line_number":535,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":536,"context_line":"                  flavor, block_migration, disk_over_commit):"},{"line_number":537,"context_line":"        if live:"},{"line_number":538,"context_line":"            destination \u003d scheduler_hint.get(\"host\")"},{"line_number":539,"context_line":"            self.scheduler_rpcapi.live_migration(context, block_migration,"},{"line_number":540,"context_line":"                    disk_over_commit, instance, destination)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2Fppo%3D","line":537,"updated":"2013-06-13 13:46:26.000000000","message":"I think this should really be:\n\nlive and not rebuild and not flavor\n\n(plus corresponding tests)","commit_id":"fe022b2cbfba8c0bc7c6b35e53ed24c98969f594"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3fcde76c582b7d866b1696b6efc847b5825ec16d","unresolved":false,"context_lines":[{"line_number":538,"context_line":"            destination \u003d scheduler_hint.get(\"host\")"},{"line_number":539,"context_line":"            self.scheduler_rpcapi.live_migration(context, block_migration,"},{"line_number":540,"context_line":"                    disk_over_commit, instance, destination)"},{"line_number":541,"context_line":"        elif flavor:"},{"line_number":542,"context_line":"            request_spec_p \u003d jsonutils.to_primitive("},{"line_number":543,"context_line":"                    scheduler_hint[\u0027request_spec\u0027])"},{"line_number":544,"context_line":"            args \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2Fpjk%3D","line":541,"updated":"2013-06-13 14:28:10.000000000","message":"My bad, this should probably include \"not live and not rebuild\", I guess?","commit_id":"d26108e4d49094d7b1c6ea6295d60d11d55deeff"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0dd53d0b46a254d49d1c51f528b8990cae5cedff","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                image \u003d {}"},{"line_number":551,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":552,"context_line":"                image, [instance])"},{"line_number":553,"context_line":"            request_spec_p \u003d jsonutils.to_primitive(request_spec)"},{"line_number":554,"context_line":"            # TODO(timello): We do reservations commit in advance on"},{"line_number":555,"context_line":"            # compute.api, so for now we just pass an empty list until we"},{"line_number":556,"context_line":"            # move compute manager stuffs in here."}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2F6Cg%3D","line":553,"updated":"2013-06-18 16:58:15.000000000","message":"This shouldn\u0027t be necessary as build_request_spec should serialize everything that needs it.  If not then that should be fixed.  I would like the request_spec as returned from the utility method to be RPC-able.","commit_id":"5506f5f41666ced419654f8e7d662d2962b3f4ee"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"6fa41a30c8982af679f53dd4fbcbd073b2d14f91","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                                  exception.InvalidSharedStorage,"},{"line_number":538,"context_line":"                                  exception.MigrationPreCheckError)"},{"line_number":539,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":540,"context_line":"            flavor, reservations, block_migration, disk_over_commit):"},{"line_number":541,"context_line":"        if live and not rebuild and not flavor:"},{"line_number":542,"context_line":"            destination \u003d scheduler_hint.get(\"host\")"},{"line_number":543,"context_line":"            self.scheduler_rpcapi.live_migration(context, block_migration,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPn%2F%2FtN4%3D","line":540,"updated":"2013-06-24 21:07:28.000000000","message":"My understanding is that we should maintain backwards compatibility for minor RPC_API_VERSION bumps so reservations needs to move to the end with a default of None.","commit_id":"bab8e2eb08891c9d33562ed26d502f73473e9fc3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e246a2f94b6234375caa0a9759df2f78ce5c0b8c","unresolved":false,"context_lines":[{"line_number":555,"context_line":"                \"request_spec\": request_spec,"},{"line_number":556,"context_line":"                \"filter_properties\": scheduler_hint[\u0027filter_properties\u0027],"},{"line_number":557,"context_line":"                \"reservations\": reservations"},{"line_number":558,"context_line":"            }"},{"line_number":559,"context_line":"            self.scheduler_rpcapi.prep_resize(context, **args)"},{"line_number":560,"context_line":"        else:"},{"line_number":561,"context_line":"            raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2Fszc%3D","line":558,"updated":"2013-06-24 23:22:03.000000000","message":"I\u0027d be fine not replicating this grossness from the other file :D","commit_id":"949c2733a6d7184e9353669c4b436e925b06b2ad"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c144dff303898d4e1ee487a39d56267fc8e48eb","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                                  exception.MigrationPreCheckError)"},{"line_number":575,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":576,"context_line":"            flavor, block_migration, disk_over_commit, reservations\u003dNone):"},{"line_number":577,"context_line":"        if live and not rebuild and not flavor:"},{"line_number":578,"context_line":"            destination \u003d scheduler_hint.get(\"host\")"},{"line_number":579,"context_line":"            self.scheduler_rpcapi.live_migration(context, block_migration,"},{"line_number":580,"context_line":"                    disk_over_commit, instance, destination)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FukM%3D","line":577,"updated":"2013-07-12 10:19:34.000000000","message":"This all seems good now, thanks.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"73083e16f0ddef4202e92543ae314a1c76a1f542","unresolved":false,"context_lines":[{"line_number":559,"context_line":"    \"\"\""},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"    RPC_API_NAMESPACE \u003d \u0027compute_task\u0027"},{"line_number":562,"context_line":"    RPC_API_VERSION \u003d \u00271.3\u0027"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    def __init__(self):"},{"line_number":565,"context_line":"        super(ComputeTaskManager, self).__init__()"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAP3%2F%2FfD4%3D","line":562,"updated":"2013-07-17 15:23:38.000000000","message":"Man, this probably needs another rebase :(","commit_id":"b3e7ff896b92a8adba5aad4a4ed5081f3b96a6fa"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b0e343d1641732ee0db959e6c193e9eed5a5a456","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        elif not live and not rebuild and flavor:"},{"line_number":589,"context_line":"            image_ref \u003d instance.get(\u0027image_ref\u0027)"},{"line_number":590,"context_line":"            if image_ref:"},{"line_number":591,"context_line":"                image \u003d self.image_service.show(context, image_ref)"},{"line_number":592,"context_line":"            else:"},{"line_number":593,"context_line":"                image \u003d {}"},{"line_number":594,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAQn%2F%2F5I4%3D","line":591,"updated":"2013-07-19 17:24:42.000000000","message":"A _get_image method was introduced below.  This should use that.  To avoid grabbing the image service everytime it could me modified to use the class level image_service you added above.","commit_id":"a1d554de391bfd33ad4b9dea0399efcbd038dca6"}],"nova/conductor/rpcapi.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c144dff303898d4e1ee487a39d56267fc8e48eb","unresolved":false,"context_lines":[{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":527,"context_line":"                  flavor, block_migration, disk_over_commit,"},{"line_number":528,"context_line":"                  reservations\u003dNone):"},{"line_number":529,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":530,"context_line":"        flavor_p \u003d jsonutils.to_primitive(flavor)"},{"line_number":531,"context_line":"        msg \u003d self.make_msg(\u0027migrate_server\u0027, instance\u003dinstance_p,"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2Fuls%3D","line":528,"updated":"2013-07-12 10:19:34.000000000","message":"I wouldn\u0027t both with the default params here, probably never used.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b0e343d1641732ee0db959e6c193e9eed5a5a456","unresolved":false,"context_lines":[{"line_number":548,"context_line":"            scheduler_hint\u003dscheduler_hint, live\u003dlive, rebuild\u003drebuild,"},{"line_number":549,"context_line":"            flavor\u003dflavor_p, block_migration\u003dblock_migration,"},{"line_number":550,"context_line":"            disk_over_commit\u003ddisk_over_commit, reservations\u003dreservations)"},{"line_number":551,"context_line":"        return self.call(context, msg, version\u003d\u00271.4\u0027)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":554,"context_line":"            admin_password, injected_files, requested_networks,"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAQn%2F%2F5IY%3D","line":551,"updated":"2013-07-19 17:24:42.000000000","message":"This should be a cast.  I know it loses the NotImplementedError, but when the work in conductor becomes long running it won\u0027t be safe to wait on it.","commit_id":"a1d554de391bfd33ad4b9dea0399efcbd038dca6"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"c8d0e9ed5dc98ff5efff9ad06897de1f8637db6b","unresolved":false,"context_lines":[{"line_number":548,"context_line":"            scheduler_hint\u003dscheduler_hint, live\u003dlive, rebuild\u003drebuild,"},{"line_number":549,"context_line":"            flavor\u003dflavor_p, block_migration\u003dblock_migration,"},{"line_number":550,"context_line":"            disk_over_commit\u003ddisk_over_commit, reservations\u003dreservations)"},{"line_number":551,"context_line":"        return self.call(context, msg, version\u003d\u00271.4\u0027)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":554,"context_line":"            admin_password, injected_files, requested_networks,"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAQn%2F%2Fdn4%3D","line":551,"in_reply_to":"AAAAQn%2F%2F5IY%3D","updated":"2013-07-30 19:33:58.000000000","message":"I think I didn\u0027t follow the problem with the cast vs call there... you said it won\u0027t be safe... could you give more details about your concern?","commit_id":"a1d554de391bfd33ad4b9dea0399efcbd038dca6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f46d6478363516ef59754382e1b4d2e39f9dbc54","unresolved":false,"context_lines":[{"line_number":548,"context_line":"            scheduler_hint\u003dscheduler_hint, live\u003dlive, rebuild\u003drebuild,"},{"line_number":549,"context_line":"            flavor\u003dflavor_p, block_migration\u003dblock_migration,"},{"line_number":550,"context_line":"            disk_over_commit\u003ddisk_over_commit, reservations\u003dreservations)"},{"line_number":551,"context_line":"        return self.call(context, msg, version\u003d\u00271.4\u0027)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":554,"context_line":"            admin_password, injected_files, requested_networks,"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAQn%2F%2Fq4E%3D","line":551,"in_reply_to":"AAAAQn%2F%2F5IY%3D","updated":"2013-07-25 12:38:17.000000000","message":"We need exceptions to get back to the API still, for live migrate at least, so sadly this needs to be a call at the moment.","commit_id":"a1d554de391bfd33ad4b9dea0399efcbd038dca6"}],"nova/tests/conductor/test_conductor.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3fcde76c582b7d866b1696b6efc847b5825ec16d","unresolved":false,"context_lines":[{"line_number":1192,"context_line":"        self.assertRaises(NotImplementedError, self.conductor.migrate_server,"},{"line_number":1193,"context_line":"            self.context, None, None, True, True, None, None, None)"},{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"    def test_migrate_server_fails_with_flavor(self):"},{"line_number":1196,"context_line":"        self.assertRaises(NotImplementedError, self.conductor.migrate_server,"},{"line_number":1197,"context_line":"            self.context, None, None, True, False, \"dummy\", None, None)"},{"line_number":1198,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2Fpjw%3D","side":"PARENT","line":1195,"updated":"2013-06-13 14:28:10.000000000","message":"Not sure why this has been removed? This checks the case where live\u003dTrue, I think.","commit_id":"d0d330fe0cc7c7e395d9604704a9efb3e9442944"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e246a2f94b6234375caa0a9759df2f78ce5c0b8c","unresolved":false,"context_lines":[{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"    def test_migrate_server(self):"},{"line_number":1205,"context_line":"        self._test_live_migrate()"},{"line_number":1206,"context_line":"        self._test_cold_migrate()"},{"line_number":1207,"context_line":""},{"line_number":1208,"context_line":"    def test_migrate_server_fails_with_rebuild(self):"},{"line_number":1209,"context_line":"        self.assertRaises(NotImplementedError, self.conductor.migrate_server,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2FszE%3D","line":1206,"updated":"2013-06-24 23:22:03.000000000","message":"I think these should be kept as separate tests. Why combine them like this?","commit_id":"949c2733a6d7184e9353669c4b436e925b06b2ad"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c144dff303898d4e1ee487a39d56267fc8e48eb","unresolved":false,"context_lines":[{"line_number":1238,"context_line":"        self.conductor_manager.scheduler_rpcapi.prep_resize("},{"line_number":1239,"context_line":"                self.context, **args)"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"        self.mox.StubOutWithMock(self.conductor_manager.image_service, \u0027show\u0027)"},{"line_number":1242,"context_line":"        self.conductor_manager.image_service.show("},{"line_number":1243,"context_line":"            self.context, fake_instance[\u0027image_ref\u0027]).AndReturn(\u0027image\u0027)"},{"line_number":1244,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2Fujw%3D","line":1241,"updated":"2013-07-12 10:19:34.000000000","message":"Its sometimes easier to read with all the mox calls at the top, but see what works for you, just an idea.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"7052db201e9636d6140d21cd39be40831cd28d71","unresolved":false,"context_lines":[{"line_number":1238,"context_line":"        self.conductor_manager.scheduler_rpcapi.prep_resize("},{"line_number":1239,"context_line":"                self.context, **args)"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"        self.mox.StubOutWithMock(self.conductor_manager.image_service, \u0027show\u0027)"},{"line_number":1242,"context_line":"        self.conductor_manager.image_service.show("},{"line_number":1243,"context_line":"            self.context, fake_instance[\u0027image_ref\u0027]).AndReturn(\u0027image\u0027)"},{"line_number":1244,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FpAs%3D","line":1241,"in_reply_to":"AAAAP3%2F%2Fujw%3D","updated":"2013-07-15 14:21:59.000000000","message":"Good suggestion. Thanks.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7c144dff303898d4e1ee487a39d56267fc8e48eb","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"        def _fake_build_request_spec(context, image, instances):"},{"line_number":1246,"context_line":"            return request_spec"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":"        self.stubs.Set(scheduler_utils, \u0027build_request_spec\u0027,"},{"line_number":1249,"context_line":"                       _fake_build_request_spec)"},{"line_number":1250,"context_line":""},{"line_number":1251,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2Fuj0%3D","line":1248,"updated":"2013-07-12 10:19:34.000000000","message":"Best not to mix mox and stubs. Can\u0027t you just use .AndReturn(request_spec) again? This is the only real reason for the -1.","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"},{"author":{"_account_id":4601,"name":"Tiago Mello","email":"tmello@linux.vnet.ibm.com","username":"tmello"},"change_message_id":"7052db201e9636d6140d21cd39be40831cd28d71","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"        def _fake_build_request_spec(context, image, instances):"},{"line_number":1246,"context_line":"            return request_spec"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":"        self.stubs.Set(scheduler_utils, \u0027build_request_spec\u0027,"},{"line_number":1249,"context_line":"                       _fake_build_request_spec)"},{"line_number":1250,"context_line":""},{"line_number":1251,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FpAo%3D","line":1248,"in_reply_to":"AAAAP3%2F%2Fuj0%3D","updated":"2013-07-15 14:21:59.000000000","message":"Done","commit_id":"45fe477a6d5f6895f2acfe4de3e7b753355d4840"}]}
