)]}'
{"nova/conductor/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e857c1e374282e9176fb4df1cd08bb194c14cb9d","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":508,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":509,"context_line":"            # NOTE(mriedem): Remove this at RPC API v2.0"},{"line_number":510,"context_line":"            instance \u003d dict(instance.items())"},{"line_number":511,"context_line":"        self.compute_api.stop(context, instance, do_cast)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FgmI%3D","line":510,"updated":"2013-06-28 20:35:15.000000000","message":"This should be:\n\n  obj_base.obj_to_primitive(instance)\n\nnow. It has changed since the other one was done, so you should prolly convert that one as well.","commit_id":"c387a873ad8460a2f08d1b2f5619bf0103e5d966"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"912d0d4e2fcf4efd38ea79db60ee7945d9f75080","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":508,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":509,"context_line":"            # NOTE(mriedem): Remove this at RPC API v2.0"},{"line_number":510,"context_line":"            instance \u003d dict(instance.items())"},{"line_number":511,"context_line":"        self.compute_api.stop(context, instance, do_cast)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fdgg%3D","line":510,"in_reply_to":"AAAAPn%2F%2FgmI%3D","updated":"2013-07-01 13:57:58.000000000","message":"Ah, now I see it, the static method in the module, not the method on the NovaBase object itself...done.","commit_id":"c387a873ad8460a2f08d1b2f5619bf0103e5d966"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"39aa6a3ee34b7ff9fb73a254ffd61ec70e1c3ad9","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":508,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":509,"context_line":"            # NOTE(mriedem): Remove this at RPC API v2.0"},{"line_number":510,"context_line":"            instance \u003d instance.obj_to_primitive()"},{"line_number":511,"context_line":"        self.compute_api.stop(context, instance, do_cast)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fe0Q%3D","line":510,"updated":"2013-06-30 20:17:53.000000000","message":"Huh? This is turning the instance object into its primitive form (not the dict form like you are doing below). This is done by the RPC layer automatically and you should _not_ be doing it here, especially since compute_stop() already accepts objects.","commit_id":"e8b331f3f9f61d1a8ee82ee33fc5aa0f3768b46d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4e0fdb0c5b79d7bd8120861fab0d63a1cdd0c77e","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":508,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":509,"context_line":"            # NOTE(mriedem): Remove this at RPC API v2.0"},{"line_number":510,"context_line":"            instance \u003d instance.obj_to_primitive()"},{"line_number":511,"context_line":"        self.compute_api.stop(context, instance, do_cast)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fey0%3D","line":510,"in_reply_to":"AAAAPn%2F%2Fe0Q%3D","updated":"2013-06-30 21:08:51.000000000","message":"In your earlier comment, you said to do this:\n\nobj_base.obj_to_primitive(instance)\n\nI assumed that obj_base was nova.objects.base.NovaObject, which Instance extends.  I didn\u0027t understand the obj_to_primitive(instance) part of your comment since it\u0027s a method on the instance object itself, which is what I thought you were getting at.","commit_id":"e8b331f3f9f61d1a8ee82ee33fc5aa0f3768b46d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3bc97c3b75b97d56ad2517113d3ac96676d4f012","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":508,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":509,"context_line":"            # NOTE(mriedem): Remove this at RPC API v2.0"},{"line_number":510,"context_line":"            instance \u003d instance.obj_to_primitive()"},{"line_number":511,"context_line":"        self.compute_api.stop(context, instance, do_cast)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FdgA%3D","line":510,"in_reply_to":"AAAAPn%2F%2Fey0%3D","updated":"2013-07-01 13:59:26.000000000","message":"Nevermind, think I get it now, I was confused about the obj_to_primitive on NovaObject.","commit_id":"e8b331f3f9f61d1a8ee82ee33fc5aa0f3768b46d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"39aa6a3ee34b7ff9fb73a254ffd61ec70e1c3ad9","unresolved":false,"context_lines":[{"line_number":513,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"},{"line_number":514,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":515,"context_line":"            # NOTE(danms): Remove this at RPC API v2.0"},{"line_number":516,"context_line":"            instance \u003d instance.obj_to_primitive()"},{"line_number":517,"context_line":"        self.compute_api.confirm_resize(context, instance, migration_ref)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def compute_unrescue(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fe0I%3D","line":516,"updated":"2013-06-30 20:17:53.000000000","message":"This is not what I said to do. Please look at the comment again. I\u0027m not sure how this is working, if you tested it.","commit_id":"e8b331f3f9f61d1a8ee82ee33fc5aa0f3768b46d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3bc97c3b75b97d56ad2517113d3ac96676d4f012","unresolved":false,"context_lines":[{"line_number":513,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"},{"line_number":514,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":515,"context_line":"            # NOTE(danms): Remove this at RPC API v2.0"},{"line_number":516,"context_line":"            instance \u003d instance.obj_to_primitive()"},{"line_number":517,"context_line":"        self.compute_api.confirm_resize(context, instance, migration_ref)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def compute_unrescue(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fdf8%3D","line":516,"in_reply_to":"AAAAPn%2F%2Fe0I%3D","updated":"2013-07-01 13:59:26.000000000","message":"Done","commit_id":"e8b331f3f9f61d1a8ee82ee33fc5aa0f3768b46d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc8e6d3dab609309ab9c0d8ca7c9e5ed62fd9123","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":508,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":509,"context_line":"            # NOTE(mriedem): Remove this at RPC API v2.0"},{"line_number":510,"context_line":"            instance \u003d nova_object.obj_to_primitive(instance)"},{"line_number":511,"context_line":"        self.compute_api.stop(context, instance, do_cast)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FWmQ%3D","line":510,"updated":"2013-07-03 14:09:25.000000000","message":"Just as a note to myself, compute_api.stop already takes an instance object so converting to a dict here is wrong, we should just pass the instance object that\u0027s already passed to this method.","commit_id":"3477870d31acc736294710780196aff9b067b956"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b040ee7c52e82c8c2e52be6f3fb1c0188afa0a6a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    namespace.  See the ComputeTaskManager class for details."},{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    RPC_API_VERSION \u003d \u00271.53\u0027"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":73,"context_line":"        super(ConductorManager, self).__init__(service_name\u003d\u0027conductor\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F%2BqI%3D","line":70,"updated":"2013-07-08 07:33:12.000000000","message":"We\u0027re bumping this version to say compute_stop() now supports instance objects, right?\n\nWhen, in fact, it has supported instance objects for quite a while now\n\nDoes the version bump really make sense?","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c6adec49260c12bd14eb54ebe3718c6ec77b225e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    namespace.  See the ComputeTaskManager class for details."},{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    RPC_API_VERSION \u003d \u00271.53\u0027"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":73,"context_line":"        super(ConductorManager, self).__init__(service_name\u003d\u0027conductor\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F9ss%3D","line":70,"in_reply_to":"AAAAP3%2F%2F%2BqI%3D","updated":"2013-07-08 13:57:28.000000000","message":"Only by chance, as you detailed below. I think we still want a version bump to denote the change in behavior going forward, no?","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2531e5f2d92f62fad2dab1106f7921d38dbeefa7","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    namespace.  See the ComputeTaskManager class for details."},{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    RPC_API_VERSION \u003d \u00271.53\u0027"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":73,"context_line":"        super(ConductorManager, self).__init__(service_name\u003d\u0027conductor\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F8nY%3D","line":70,"in_reply_to":"AAAAP3%2F%2F9ss%3D","updated":"2013-07-08 18:36:37.000000000","message":"Unless there is more discussion on this, I\u0027ll leave the version bump.","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b040ee7c52e82c8c2e52be6f3fb1c0188afa0a6a","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        return ec2_ids"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":508,"context_line":"        self.compute_api.stop(context, instance, do_cast)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F%2Brc%3D","line":507,"updated":"2013-07-08 07:33:12.000000000","message":"Wait, where is the support for primitive instance dicts? Did we remove it in I4e34e0a2b9db77468305aaf1782feb74bcfdccbd ?\n\ni.e. the support for clients sending version 1.43 calls?","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c6adec49260c12bd14eb54ebe3718c6ec77b225e","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        return ec2_ids"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":508,"context_line":"        self.compute_api.stop(context, instance, do_cast)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F9sc%3D","line":507,"in_reply_to":"AAAAP3%2F%2F%2Brc%3D","updated":"2013-07-08 13:57:28.000000000","message":"Yeah, you\u0027re exactly right. The compute/api::stop() will expect an instance object so we had better convert it here.","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2531e5f2d92f62fad2dab1106f7921d38dbeefa7","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        return ec2_ids"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":508,"context_line":"        self.compute_api.stop(context, instance, do_cast)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F8mw%3D","line":507,"in_reply_to":"AAAAP3%2F%2F9sc%3D","updated":"2013-07-08 18:36:37.000000000","message":"Please confirm my understanding here, I need to check if instance is a dict here and if so, convert to an object?","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b040ee7c52e82c8c2e52be6f3fb1c0188afa0a6a","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"},{"line_number":511,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":512,"context_line":"            # NOTE(danms): Remove this at RPC API v2.0"},{"line_number":513,"context_line":"            instance \u003d nova_object.obj_to_primitive(instance)"},{"line_number":514,"context_line":"        self.compute_api.confirm_resize(context, instance, migration_ref)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    def compute_unrescue(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F%2BrM%3D","line":513,"updated":"2013-07-08 07:33:12.000000000","message":"This doesn\u0027t seem related to the issue described in the commit message. Should it be a separate patch?","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c6adec49260c12bd14eb54ebe3718c6ec77b225e","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"},{"line_number":511,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":512,"context_line":"            # NOTE(danms): Remove this at RPC API v2.0"},{"line_number":513,"context_line":"            instance \u003d nova_object.obj_to_primitive(instance)"},{"line_number":514,"context_line":"        self.compute_api.confirm_resize(context, instance, migration_ref)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    def compute_unrescue(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F9sQ%3D","line":513,"in_reply_to":"AAAAP3%2F%2F%2BrM%3D","updated":"2013-07-08 13:57:28.000000000","message":"I asked him to add it in a previous set because he was adding a primitiv-ization at the time, and using the newer method. That was then... now it\u0027s unrelated, as you point out.","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2531e5f2d92f62fad2dab1106f7921d38dbeefa7","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"},{"line_number":511,"context_line":"        if isinstance(instance, nova_object.NovaObject):"},{"line_number":512,"context_line":"            # NOTE(danms): Remove this at RPC API v2.0"},{"line_number":513,"context_line":"            instance \u003d nova_object.obj_to_primitive(instance)"},{"line_number":514,"context_line":"        self.compute_api.confirm_resize(context, instance, migration_ref)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    def compute_unrescue(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F8ms%3D","line":513,"in_reply_to":"AAAAP3%2F%2F9sQ%3D","updated":"2013-07-08 18:36:37.000000000","message":"I\u0027ll remove this change.","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8a24599528eae5ec2452013a8fd97722f6d10776","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    namespace.  See the ComputeTaskManager class for details."},{"line_number":70,"context_line":"    \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    RPC_API_VERSION \u003d \u00271.54\u0027"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":75,"context_line":"        super(ConductorManager, self).__init__(service_name\u003d\u0027conductor\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2F7vg%3D","line":72,"updated":"2013-07-08 22:51:57.000000000","message":"My point about this version bump is that, in fact, an early version of manager.py supported instance objects ... so the client could require the earlier version when sending an instance object\n\n... but there\u0027s no huge issue in bumping it either","commit_id":"ec5e391703c55617fef54a31933ca844bd4118b6"}],"nova/conductor/rpcapi.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc8e6d3dab609309ab9c0d8ca7c9e5ed62fd9123","unresolved":false,"context_lines":[{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def compute_stop(self, context, instance, do_cast\u003dTrue):"},{"line_number":458,"context_line":"        msg \u003d self.make_msg(\u0027compute_stop\u0027, instance\u003dinstance, do_cast\u003ddo_cast)"},{"line_number":459,"context_line":"        return self.call(context, msg, version\u003d\u00271.53\u0027)"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def compute_confirm_resize(self, context, instance, migration_ref):"},{"line_number":462,"context_line":"        migration_p \u003d jsonutils.to_primitive(migration_ref)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FWjI%3D","line":459,"updated":"2013-07-03 14:09:25.000000000","message":"Need to handle compatibility with older installations, see:\n\nhttps://review.openstack.org/#/c/35186/","commit_id":"3477870d31acc736294710780196aff9b067b956"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b040ee7c52e82c8c2e52be6f3fb1c0188afa0a6a","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    1.51 - Added the \u0027legacy\u0027 argument to"},{"line_number":104,"context_line":"           block_device_mapping_get_all_by_instance"},{"line_number":105,"context_line":"    1.52 - Pass instance objects for compute_confirm_resize"},{"line_number":106,"context_line":"    1.53 - Pass instance objects for compute_stop"},{"line_number":107,"context_line":"    \"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F%2BpY%3D","line":106,"updated":"2013-07-08 07:33:12.000000000","message":"We bump the version when some behaviour changes on the *manager* side and we want to allow the client side to require it\n\nNothing is changing on the manager side here, just on the client side\n\nI\u0027ve always said this, but I\u0027ll grumble again ... this changelog really belongs in manager.py since it\u0027s about changes to the manager side of the interface","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c6adec49260c12bd14eb54ebe3718c6ec77b225e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    1.51 - Added the \u0027legacy\u0027 argument to"},{"line_number":104,"context_line":"           block_device_mapping_get_all_by_instance"},{"line_number":105,"context_line":"    1.52 - Pass instance objects for compute_confirm_resize"},{"line_number":106,"context_line":"    1.53 - Pass instance objects for compute_stop"},{"line_number":107,"context_line":"    \"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F9r0%3D","line":106,"in_reply_to":"AAAAP3%2F%2F%2BpY%3D","updated":"2013-07-08 13:57:28.000000000","message":"Since conductor is wrapping a non-versioned interface, this version bump and note is really accounting for the fact that compute/api::stop() has changed behavior, so I think it\u0027s important to keep it.\n\nAgreed on being in manager.py.","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2531e5f2d92f62fad2dab1106f7921d38dbeefa7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    1.51 - Added the \u0027legacy\u0027 argument to"},{"line_number":104,"context_line":"           block_device_mapping_get_all_by_instance"},{"line_number":105,"context_line":"    1.52 - Pass instance objects for compute_confirm_resize"},{"line_number":106,"context_line":"    1.53 - Pass instance objects for compute_stop"},{"line_number":107,"context_line":"    \"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F8mg%3D","line":106,"in_reply_to":"AAAAP3%2F%2F9r0%3D","updated":"2013-07-08 18:36:37.000000000","message":"Mark/Dan, do you want me to move this version change log (the whole thing) to conductor.manager.py?","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"}],"nova/tests/conductor/test_conductor.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"b040ee7c52e82c8c2e52be6f3fb1c0188afa0a6a","unresolved":false,"context_lines":[{"line_number":813,"context_line":"        self.mox.StubOutWithMock(self.conductor_manager.compute_api, \u0027stop\u0027)"},{"line_number":814,"context_line":"        self.conductor_manager.compute_api.stop(self.context, inst_obj, True)"},{"line_number":815,"context_line":"        self.mox.ReplayAll()"},{"line_number":816,"context_line":"        self.conductor.compute_stop(self.context, inst_obj)"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def test_compute_confirm_resize_with_objects(self):"},{"line_number":819,"context_line":"        # use an instance object rather than a dict"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F%2Bok%3D","line":816,"updated":"2013-07-08 07:33:12.000000000","message":"Hmm, I\u0027m not convinced this is doing anything more useful than test_compute_stop()\n\nAll we\u0027re testing is that conductor.compute_stop() calls compute_api.stop() with the parameters\n\nThe fact that it\u0027s an instance object is neither here nor there\n\nThe bug we\u0027re fixing is that the manager side *requires* an instance objects and the client side is sending a dict ... so we should be testing that the client does indeed match the managers\u0027 requirements\n\nBut, then again, the manager side should be fixed to support instance dicts since old clients may still be using the 1.43 interface","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2531e5f2d92f62fad2dab1106f7921d38dbeefa7","unresolved":false,"context_lines":[{"line_number":813,"context_line":"        self.mox.StubOutWithMock(self.conductor_manager.compute_api, \u0027stop\u0027)"},{"line_number":814,"context_line":"        self.conductor_manager.compute_api.stop(self.context, inst_obj, True)"},{"line_number":815,"context_line":"        self.mox.ReplayAll()"},{"line_number":816,"context_line":"        self.conductor.compute_stop(self.context, inst_obj)"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def test_compute_confirm_resize_with_objects(self):"},{"line_number":819,"context_line":"        # use an instance object rather than a dict"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F8l4%3D","line":816,"in_reply_to":"AAAAP3%2F%2F%2Bok%3D","updated":"2013-07-08 18:36:37.000000000","message":"Mark, sorry but I\u0027m not completely understanding why the fact that testing with an instance object doesn\u0027t matter here - to just dumb this down for my own sake, are you saying that once I change conductor.manager.compute_stop to handle instance as a dict (instead of object), this test becomes useful?","commit_id":"c7a9a3664a90c1f8310090ec519eb16398f227b9"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8a24599528eae5ec2452013a8fd97722f6d10776","unresolved":false,"context_lines":[{"line_number":817,"context_line":"        self.mox.StubOutWithMock(self.conductor_manager.compute_api, \u0027stop\u0027)"},{"line_number":818,"context_line":"        self.conductor_manager.compute_api.stop(self.context, inst_obj, True)"},{"line_number":819,"context_line":"        self.mox.ReplayAll()"},{"line_number":820,"context_line":"        self.conductor.compute_stop(self.context, inst_obj)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    def test_compute_confirm_resize_with_objects(self):"},{"line_number":823,"context_line":"        # use an instance object rather than a dict"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2F7tw%3D","line":820,"updated":"2013-07-08 22:51:57.000000000","message":"Again, this test doesn\u0027t do anything interesting\n\nWe create a mock instance object and stub out compute_api.stop()\n\nSo, by calling compute_stop() with the mock object all we\u0027re doing is:\n\n  if isinstance(instance, dict):\n      instance \u003d ....\n  self.compute_api.stop(context, instance, do_cast)\n\nis checking that, so long as the instance argument isn\u0027t a dict, it gets passed through to compute_api.stop() unmolested\n\nThe test_compute_stop() does this exact same thing, but just uses a string\n\nThe use of an instance object gives the appearance of testing something more significant, but it really doesn\u0027t\n\nPut it another way - try and change the compute_stop() code so that this test fails and test_compute_stop() passes\n\nWhat we should test here is that compute_stop() handles dict instances correctly","commit_id":"ec5e391703c55617fef54a31933ca844bd4118b6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"250fbdf52d48ce29a55e7c6a22a2b159e1e4b418","unresolved":false,"context_lines":[{"line_number":817,"context_line":"        self.mox.StubOutWithMock(self.conductor_manager.compute_api, \u0027stop\u0027)"},{"line_number":818,"context_line":"        self.conductor_manager.compute_api.stop(self.context, inst_obj, True)"},{"line_number":819,"context_line":"        self.mox.ReplayAll()"},{"line_number":820,"context_line":"        self.conductor.compute_stop(self.context, inst_obj)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    def test_compute_confirm_resize_with_objects(self):"},{"line_number":823,"context_line":"        # use an instance object rather than a dict"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2F7sY%3D","line":820,"in_reply_to":"AAAAP3%2F%2F7tw%3D","updated":"2013-07-08 23:00:25.000000000","message":"It might not be interesting, but passing the instance object is what I wanted to cover here rather than the string in the original test_compute_stop().  I actually originally tried changing that one but ran into problems with that in the rpcapi test classes in here, so ripped it out.\n\nI also tried adding a test case like this one that passes in a dict but the argument equality was failing because the code creates a new Instance() object at runtime.","commit_id":"ec5e391703c55617fef54a31933ca844bd4118b6"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8a24599528eae5ec2452013a8fd97722f6d10776","unresolved":false,"context_lines":[{"line_number":819,"context_line":"        self.mox.ReplayAll()"},{"line_number":820,"context_line":"        self.conductor.compute_stop(self.context, inst_obj)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    def test_compute_confirm_resize_with_objects(self):"},{"line_number":823,"context_line":"        # use an instance object rather than a dict"},{"line_number":824,"context_line":"        instance \u003d self._create_fake_instance()"},{"line_number":825,"context_line":"        inst_obj \u003d instance_obj.Instance._from_db_object("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2F7vU%3D","line":822,"updated":"2013-07-08 22:51:57.000000000","message":"This also is unrelated to this patch","commit_id":"ec5e391703c55617fef54a31933ca844bd4118b6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"250fbdf52d48ce29a55e7c6a22a2b159e1e4b418","unresolved":false,"context_lines":[{"line_number":819,"context_line":"        self.mox.ReplayAll()"},{"line_number":820,"context_line":"        self.conductor.compute_stop(self.context, inst_obj)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    def test_compute_confirm_resize_with_objects(self):"},{"line_number":823,"context_line":"        # use an instance object rather than a dict"},{"line_number":824,"context_line":"        instance \u003d self._create_fake_instance()"},{"line_number":825,"context_line":"        inst_obj \u003d instance_obj.Instance._from_db_object("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2F7sk%3D","line":822,"in_reply_to":"AAAAP3%2F%2F7vU%3D","updated":"2013-07-08 23:00:25.000000000","message":"Yeah, I debated taking this out since I took out the related change in the conductor manager, but figured it doesn\u0027t hurt to have additional coverage.  I knew that if someone had an issue with this, they\u0027d voice that with a -1.","commit_id":"ec5e391703c55617fef54a31933ca844bd4118b6"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b48d529fbef8024a45472da049a102ec4437e212","unresolved":false,"context_lines":[{"line_number":822,"context_line":"        self.mox.ReplayAll()"},{"line_number":823,"context_line":"        self.conductor.compute_stop(self.context, inst_obj)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"    def test_compute_confirm_resize_with_objects(self):"},{"line_number":826,"context_line":"        # use an instance object rather than a dict"},{"line_number":827,"context_line":"        instance \u003d self._create_fake_instance()"},{"line_number":828,"context_line":"        inst_obj \u003d instance_obj.Instance._from_db_object("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAQn%2F%2F5qc%3D","line":825,"updated":"2013-07-19 15:10:15.000000000","message":"Technically an unrelated change which shouldn\u0027t be here.  But I\u0027m not going to -1 for an additional test in this case.","commit_id":"190d8ca4524df0b0fdd3514886672f51bd7da43a"}]}
