)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"36f20323fdb6dc874ca4cf03ab5c6258dde8c61e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import/registration before this can be put into the tree, but"},{"line_number":17,"context_line":"that\u0027s fairly minor."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Related to bp/unified-internal-objects"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I3c8d9cba07d34097a279502062906de802d19d1f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPH%2F%2FyRs%3D","line":19,"updated":"2013-05-23 02:46:36.000000000","message":"I couldn\u0027t find blueprint \u0027unified-internal-objects\u0027, did you mean \u0027unified-object-model\u0027?","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1d12e66470ad25feb190e68e78a8a86828ccf54e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import/registration before this can be put into the tree, but"},{"line_number":17,"context_line":"that\u0027s fairly minor."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Related to bp/unified-internal-objects"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I3c8d9cba07d34097a279502062906de802d19d1f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPH%2F%2FyOo%3D","line":19,"in_reply_to":"AAAAPH%2F%2FyRs%3D","updated":"2013-05-23 03:24:14.000000000","message":"Yeah, it\u0027s right in the branch. This is old, from the staging tree :)","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ddd2dc2b246185ac73c422ab183d7c53e757b544","unresolved":false,"context_lines":[{"line_number":14,"context_line":"When adding a new object type, that register function should be"},{"line_number":15,"context_line":"updated appropriately."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Related to bp/unified-object-model"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I3c8d9cba07d34097a279502062906de802d19d1f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2FtlI%3D","line":17,"updated":"2013-05-24 18:19:09.000000000","message":"femtonit: if you make this \"bp unified-object-model\" you get a nice automatic link!","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"}],"nova/api/ec2/cloud.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"36f20323fdb6dc874ca4cf03ab5c6258dde8c61e","unresolved":false,"context_lines":[{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"            if vm_state \u003d\u003d vm_states.ACTIVE:"},{"line_number":1643,"context_line":"                restart_instance \u003d True"},{"line_number":1644,"context_line":"                # FIXME(danms): Temporary object conversion!"},{"line_number":1645,"context_line":"                inst_obj \u003d instance_obj.Instance._from_db_object("},{"line_number":1646,"context_line":"                    instance, expected_attrs\u003d[\u0027system_metadata\u0027, \u0027metadata\u0027])"},{"line_number":1647,"context_line":"                inst_obj._context \u003d context"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FySE%3D","line":1644,"updated":"2013-05-23 02:46:36.000000000","message":"Since you have this conversion in here twice, you could throw it into a helper method...but it\u0027s temporary so maybe not necessary.","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1d12e66470ad25feb190e68e78a8a86828ccf54e","unresolved":false,"context_lines":[{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"            if vm_state \u003d\u003d vm_states.ACTIVE:"},{"line_number":1643,"context_line":"                restart_instance \u003d True"},{"line_number":1644,"context_line":"                # FIXME(danms): Temporary object conversion!"},{"line_number":1645,"context_line":"                inst_obj \u003d instance_obj.Instance._from_db_object("},{"line_number":1646,"context_line":"                    instance, expected_attrs\u003d[\u0027system_metadata\u0027, \u0027metadata\u0027])"},{"line_number":1647,"context_line":"                inst_obj._context \u003d context"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FyOk%3D","line":1644,"in_reply_to":"AAAAPH%2F%2FySE%3D","updated":"2013-05-23 03:24:14.000000000","message":"Meh, it\u0027s temporary, so I dunno. It may not even be this way at merge, we\u0027ll see.","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ddd2dc2b246185ac73c422ab183d7c53e757b544","unresolved":false,"context_lines":[{"line_number":1358,"context_line":"            validate_ec2_id(ec2_id)"},{"line_number":1359,"context_line":"            instance_uuid \u003d ec2utils.ec2_inst_id_to_uuid(context, ec2_id)"},{"line_number":1360,"context_line":"            if objects:"},{"line_number":1361,"context_line":"                instance \u003d instance_obj.Instance.get_by_uuid("},{"line_number":1362,"context_line":"                    context, uuid\u003dinstance_uuid, expected_attrs\u003dextra)"},{"line_number":1363,"context_line":"            else:"},{"line_number":1364,"context_line":"                instance \u003d self.compute_api.get(context, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FtkY%3D","line":1361,"updated":"2013-05-24 18:19:09.000000000","message":"I would still like to see Instance.get_by_uuid_with_meta which handles the [\u0027system_metadata\u0027, \u0027metadata\u0027] list that is frequently used throughout this patch. Or if not putting it directly on the Instance class, could put a temp helper method in __init__.py like you have for the object registration?","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b059ff2f1af68a52ce1316109d5a21270109c19","unresolved":false,"context_lines":[{"line_number":1358,"context_line":"            validate_ec2_id(ec2_id)"},{"line_number":1359,"context_line":"            instance_uuid \u003d ec2utils.ec2_inst_id_to_uuid(context, ec2_id)"},{"line_number":1360,"context_line":"            if objects:"},{"line_number":1361,"context_line":"                instance \u003d instance_obj.Instance.get_by_uuid("},{"line_number":1362,"context_line":"                    context, uuid\u003dinstance_uuid, expected_attrs\u003dextra)"},{"line_number":1363,"context_line":"            else:"},{"line_number":1364,"context_line":"                instance \u003d self.compute_api.get(context, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FtVQ%3D","line":1361,"in_reply_to":"AAAAPH%2F%2Ftg0%3D","updated":"2013-05-24 20:04:23.000000000","message":"OK, I can buy that.","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5fa102eed5382a23712ae73091fc0267488f48ad","unresolved":false,"context_lines":[{"line_number":1358,"context_line":"            validate_ec2_id(ec2_id)"},{"line_number":1359,"context_line":"            instance_uuid \u003d ec2utils.ec2_inst_id_to_uuid(context, ec2_id)"},{"line_number":1360,"context_line":"            if objects:"},{"line_number":1361,"context_line":"                instance \u003d instance_obj.Instance.get_by_uuid("},{"line_number":1362,"context_line":"                    context, uuid\u003dinstance_uuid, expected_attrs\u003dextra)"},{"line_number":1363,"context_line":"            else:"},{"line_number":1364,"context_line":"                instance \u003d self.compute_api.get(context, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Ftg0%3D","line":1361,"in_reply_to":"AAAAPH%2F%2FtkY%3D","updated":"2013-05-24 18:48:13.000000000","message":"Here\u0027s the problem with that. If I provide that, I think folks will always use that method, not knowing if either or both are really required by the entire call chain, which defeats the purpose of optimizing when we don\u0027t need it. If they don\u0027t specify it and do actually need it, it will be demand-loaded, which we could later profile and know when and where we need to pre-fetch it. If we end up with a lot of folks pre-fetching for no reason, it\u0027s much harder to determine where those cases are and go clean them out.","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"e3c7d35ca5dbaea25bcad28bb79cbd148c50f93e","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        instance_obj.Instance(), db_instance,"},{"line_number":215,"context_line":"        expected_attrs\u003d[\u0027system_metadata\u0027, \u0027metadata\u0027])"},{"line_number":216,"context_line":"    inst_obj._context \u003d context"},{"line_number":217,"context_line":"    return inst_obj"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"class CloudController(object):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FisM%3D","line":217,"updated":"2013-05-30 21:25:34.000000000","message":"Just a note:  A future patch of yours for using InstanceList for _init_host() makes an assumption that accessing the objects as dicts is backwards compatible.  If that is actually true, you could remove this hack and fix all \u0027get\u0027 calls to get the objects.  But... I think we do that later.  You kinda need the InstanceList for it.","commit_id":"78077c3a07211b9573b2647c6b9d5089fc1052a0"}],"nova/api/openstack/compute/contrib/server_start_stop.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ddd2dc2b246185ac73c422ab183d7c53e757b544","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def _get_instance(self, context, instance_uuid):"},{"line_number":36,"context_line":"        try:"},{"line_number":37,"context_line":"            attrs \u003d [\u0027system_metadata\u0027, \u0027metadata\u0027]"},{"line_number":38,"context_line":"            return instance_obj.Instance.get_by_uuid(context,"},{"line_number":39,"context_line":"                                                     uuid\u003dinstance_uuid,"},{"line_number":40,"context_line":"                                                     expected_attrs\u003dattrs)"},{"line_number":41,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FtkQ%3D","line":38,"updated":"2013-05-24 18:19:09.000000000","message":"Same comment from ec2.cloud.","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"}],"nova/cmd/compute.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ddd2dc2b246185ac73c422ab183d7c53e757b544","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def main():"},{"line_number":56,"context_line":"    nova_object.register_all()"},{"line_number":57,"context_line":"    config.parse_args(sys.argv)"},{"line_number":58,"context_line":"    logging.setup(\u0027nova\u0027)"},{"line_number":59,"context_line":"    utils.monkey_patch()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Ftks%3D","line":56,"updated":"2013-05-24 18:19:09.000000000","message":"I definitely like this better than the original.","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"}],"nova/cmd/conductor.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"36f20323fdb6dc874ca4cf03ab5c6258dde8c61e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from nova import config"},{"line_number":24,"context_line":"from nova.object import instance  # Required for registration!"},{"line_number":25,"context_line":"from nova.openstack.common import log as logging"},{"line_number":26,"context_line":"from nova import service"},{"line_number":27,"context_line":"from nova import utils"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FyRc%3D","line":24,"updated":"2013-05-23 02:46:36.000000000","message":"I don\u0027t get this but it\u0027s probably just because I haven\u0027t gone through the earlier reviews for this blueprint...","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1d12e66470ad25feb190e68e78a8a86828ccf54e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from nova import config"},{"line_number":24,"context_line":"from nova.object import instance  # Required for registration!"},{"line_number":25,"context_line":"from nova.openstack.common import log as logging"},{"line_number":26,"context_line":"from nova import service"},{"line_number":27,"context_line":"from nova import utils"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FyOY%3D","line":24,"in_reply_to":"AAAAPH%2F%2FyRc%3D","updated":"2013-05-23 03:24:14.000000000","message":"The act of importing the module registers the object. See the base patch, details in NovaObjectMetaClass.","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"36f20323fdb6dc874ca4cf03ab5c6258dde8c61e","unresolved":false,"context_lines":[{"line_number":1318,"context_line":""},{"line_number":1319,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":1320,"context_line":"        instance.progress \u003d 0"},{"line_number":1321,"context_line":"        instance.save(expected_task_state\u003dNone)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        self._record_action_start(context, instance, instance_actions.STOP)"},{"line_number":1324,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FyRA%3D","line":1321,"updated":"2013-05-23 02:46:36.000000000","message":"Looking at the Instance.save method in instance.py, it takes a context parameter but you don\u0027t pass that here, just wondering why?  I don\u0027t see it built in or defaulted in that code.","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"deac7d2595016eca5362922bd0e7071c16a37ef0","unresolved":false,"context_lines":[{"line_number":1318,"context_line":""},{"line_number":1319,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":1320,"context_line":"        instance.progress \u003d 0"},{"line_number":1321,"context_line":"        instance.save(expected_task_state\u003dNone)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        self._record_action_start(context, instance, instance_actions.STOP)"},{"line_number":1324,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FxWI%3D","line":1321,"in_reply_to":"AAAAPH%2F%2FyOM%3D","updated":"2013-05-23 13:18:58.000000000","message":"OK, I see that in the base code now, when it sets the context on the object in the wrapper and when deserializing it.  Nice to not have to pass that around all the time.","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1d12e66470ad25feb190e68e78a8a86828ccf54e","unresolved":false,"context_lines":[{"line_number":1318,"context_line":""},{"line_number":1319,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":1320,"context_line":"        instance.progress \u003d 0"},{"line_number":1321,"context_line":"        instance.save(expected_task_state\u003dNone)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        self._record_action_start(context, instance, instance_actions.STOP)"},{"line_number":1324,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FyOM%3D","line":1321,"in_reply_to":"AAAAPH%2F%2FyRA%3D","updated":"2013-05-23 03:24:14.000000000","message":"This is handled for us in the remotable wrapper. It uses the context that gets stashed in the object itself, which prevents us from having to keep passing it every time we do an object operation, and also helps ensure that the original context is the one that gets used.","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"0bb0506b6e92c8724cff2dbf50a748ac724b2648","unresolved":false,"context_lines":[{"line_number":1358,"context_line":"        if isinstance(instance, dict):"},{"line_number":1359,"context_line":"            instance \u003d instance_obj.Instance._from_db_object("},{"line_number":1360,"context_line":"                instance_obj.Instance(), instance)"},{"line_number":1361,"context_line":"            instance._context \u003d context"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":1364,"context_line":"        instance.progress \u003d 0"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fc3g%3D","line":1361,"updated":"2013-06-03 17:08:38.000000000","message":"Is this one needed?  You\u0027ve changed all spots that call this, it looked like.","commit_id":"1b020f5fb77bf8927dc4749243f81f2f27340848"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"8fe29ba55e1a0fd60053f37fdff0b0c0a010b593","unresolved":false,"context_lines":[{"line_number":1358,"context_line":"        if isinstance(instance, dict):"},{"line_number":1359,"context_line":"            instance \u003d instance_obj.Instance._from_db_object("},{"line_number":1360,"context_line":"                instance_obj.Instance(), instance)"},{"line_number":1361,"context_line":"            instance._context \u003d context"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":1364,"context_line":"        instance.progress \u003d 0"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fc0U%3D","line":1361,"in_reply_to":"AAAAPH%2F%2Fc00%3D","updated":"2013-06-03 17:31:36.000000000","message":"I can\u0027t tell if you answered the question I meant.. but I wasn\u0027t clear.  It looked like you had fixed all cases of calling stop() to pass an object, in which case this whole block of code would not be needed.  However, after re-looking, it looks like you left that one call that goes via conductor back to compute API.  So, this *is* needed.  And then I see you remove this block of code later when that method is fixed. :)  So I guess I\u0027m good here.","commit_id":"1b020f5fb77bf8927dc4749243f81f2f27340848"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3f1006fad23f31730aa473c1be62a77debd39c9f","unresolved":false,"context_lines":[{"line_number":1358,"context_line":"        if isinstance(instance, dict):"},{"line_number":1359,"context_line":"            instance \u003d instance_obj.Instance._from_db_object("},{"line_number":1360,"context_line":"                instance_obj.Instance(), instance)"},{"line_number":1361,"context_line":"            instance._context \u003d context"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"        instance.task_state \u003d task_states.POWERING_OFF"},{"line_number":1364,"context_line":"        instance.progress \u003d 0"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fc00%3D","line":1361,"in_reply_to":"AAAAPH%2F%2Fc3g%3D","updated":"2013-06-03 17:23:01.000000000","message":"It\u0027s needed a few lines down when we do the save(). We could pass context to save (which is optional) if you\u0027d prefer, but I figured this is transition code right now, so better to leave the other code in its eventual form...","commit_id":"1b020f5fb77bf8927dc4749243f81f2f27340848"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"36f20323fdb6dc874ca4cf03ab5c6258dde8c61e","unresolved":false,"context_lines":[{"line_number":1729,"context_line":"                                 task_state\u003dtask_states.STOPPING,"},{"line_number":1730,"context_line":"                                 terminated_at\u003dtimeutils.utcnow(),"},{"line_number":1731,"context_line":"                                 progress\u003d0)"},{"line_number":1732,"context_line":"                # FIXME(danms): Temporary, for object transition"},{"line_number":1733,"context_line":"                extra \u003d [\u0027system_metadata\u0027, \u0027metadata\u0027]"},{"line_number":1734,"context_line":"                inst_obj \u003d instance_obj.Instance.get_by_uuid("},{"line_number":1735,"context_line":"                    context, uuid\u003dinstance[\u0027uuid\u0027], expected_attrs\u003dextra)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FyQk%3D","line":1732,"updated":"2013-05-23 02:46:36.000000000","message":"Depending on how long the transition takes, I think it would be nice to have a helper method on the Instance class called get_by_uuid_with_meta that basically just calls get_by_uuid and handles the [\u0027system_metadata\u0027,\u0027metadata\u0027] for you.","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1d12e66470ad25feb190e68e78a8a86828ccf54e","unresolved":false,"context_lines":[{"line_number":1729,"context_line":"                                 task_state\u003dtask_states.STOPPING,"},{"line_number":1730,"context_line":"                                 terminated_at\u003dtimeutils.utcnow(),"},{"line_number":1731,"context_line":"                                 progress\u003d0)"},{"line_number":1732,"context_line":"                # FIXME(danms): Temporary, for object transition"},{"line_number":1733,"context_line":"                extra \u003d [\u0027system_metadata\u0027, \u0027metadata\u0027]"},{"line_number":1734,"context_line":"                inst_obj \u003d instance_obj.Instance.get_by_uuid("},{"line_number":1735,"context_line":"                    context, uuid\u003dinstance[\u0027uuid\u0027], expected_attrs\u003dextra)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2FyN0%3D","line":1732,"in_reply_to":"AAAAPH%2F%2FyQk%3D","updated":"2013-05-23 03:24:14.000000000","message":"Yeah, makes sense.","commit_id":"e6f7160a17d962ccbb75f8a8850832b0c11a3c0d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ddd2dc2b246185ac73c422ab183d7c53e757b544","unresolved":false,"context_lines":[{"line_number":1731,"context_line":"                                 progress\u003d0)"},{"line_number":1732,"context_line":"                # FIXME(danms): Temporary, for object transition"},{"line_number":1733,"context_line":"                extra \u003d [\u0027system_metadata\u0027, \u0027metadata\u0027]"},{"line_number":1734,"context_line":"                inst_obj \u003d instance_obj.Instance.get_by_uuid("},{"line_number":1735,"context_line":"                    context, uuid\u003dinstance[\u0027uuid\u0027], expected_attrs\u003dextra)"},{"line_number":1736,"context_line":"                self.stop_instance(context, inst_obj)"},{"line_number":1737,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FtkE%3D","line":1734,"updated":"2013-05-24 18:19:09.000000000","message":"Same comment as in ec2.cloud.","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"a9bb6767ccc545643cee40051499d989c1d1795d","unresolved":false,"context_lines":[{"line_number":1440,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1441,"context_line":"        self.driver.power_off(instance)"},{"line_number":1442,"context_line":"        current_power_state \u003d self._get_power_state(context, instance)"},{"line_number":1443,"context_line":"        instance.power_state \u003d current_power_state"},{"line_number":1444,"context_line":"        instance.vm_state \u003d vm_states.STOPPED"},{"line_number":1445,"context_line":"        instance.task_state \u003d None"},{"line_number":1446,"context_line":"        instance.save(expected_task_state\u003d(task_states.POWERING_OFF,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2Fiw8%3D","line":1443,"updated":"2013-05-30 21:02:58.000000000","message":"Goes along with the version bump... but we tend to account for the \"old message\" in these until the next major release. :-/  I really don\u0027t want to kludge all of these to have to support a dict AND and object depending on what\u0027s passed in... but :-/","commit_id":"78077c3a07211b9573b2647c6b9d5089fc1052a0"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"fd0c476a8cca5ae2175185a369c06ac9395d24ea","unresolved":false,"context_lines":[{"line_number":1440,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1441,"context_line":"        self.driver.power_off(instance)"},{"line_number":1442,"context_line":"        current_power_state \u003d self._get_power_state(context, instance)"},{"line_number":1443,"context_line":"        instance.power_state \u003d current_power_state"},{"line_number":1444,"context_line":"        instance.vm_state \u003d vm_states.STOPPED"},{"line_number":1445,"context_line":"        instance.task_state \u003d None"},{"line_number":1446,"context_line":"        instance.save(expected_task_state\u003d(task_states.POWERING_OFF,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2Fiug%3D","line":1443,"in_reply_to":"AAAAPH%2F%2Fiv8%3D","updated":"2013-05-30 21:13:01.000000000","message":"lol.  I am totally cool with a decorator here.  In fact, I think you need to do it...and have it execute before the other decorators.  You\u0027ve not patched the other decorators use of \u0027instance\u0027 to support objects...  (Although I didn\u0027t check that they actually use it)","commit_id":"78077c3a07211b9573b2647c6b9d5089fc1052a0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2170b545c9ca535b9bbf87bad2075f9cbdb5cf77","unresolved":false,"context_lines":[{"line_number":1440,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1441,"context_line":"        self.driver.power_off(instance)"},{"line_number":1442,"context_line":"        current_power_state \u003d self._get_power_state(context, instance)"},{"line_number":1443,"context_line":"        instance.power_state \u003d current_power_state"},{"line_number":1444,"context_line":"        instance.vm_state \u003d vm_states.STOPPED"},{"line_number":1445,"context_line":"        instance.task_state \u003d None"},{"line_number":1446,"context_line":"        instance.save(expected_task_state\u003d(task_states.POWERING_OFF,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2Fiv8%3D","line":1443,"in_reply_to":"AAAAPH%2F%2Fiw8%3D","updated":"2013-05-30 21:06:53.000000000","message":"So, we could stack another decorator in here that provided backwards compatibility here. If instance is just a dict, then we call Instance._from_db_object(instance) to get ourselves an object. Okay, you\u0027re going to balk at a decorator, so at least a helper function :)","commit_id":"78077c3a07211b9573b2647c6b9d5089fc1052a0"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"8fe29ba55e1a0fd60053f37fdff0b0c0a010b593","unresolved":false,"context_lines":[{"line_number":1716,"context_line":"                # FIXME(danms): Temporary, for object transition"},{"line_number":1717,"context_line":"                extra \u003d [\u0027system_metadata\u0027, \u0027metadata\u0027]"},{"line_number":1718,"context_line":"                inst_obj \u003d instance_obj.Instance.get_by_uuid("},{"line_number":1719,"context_line":"                    context, uuid\u003dinstance[\u0027uuid\u0027], expected_attrs\u003dextra)"},{"line_number":1720,"context_line":"                self.stop_instance(context, instance\u003dinst_obj)"},{"line_number":1721,"context_line":""},{"line_number":1722,"context_line":"            self._notify_about_instance_usage("}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fc08%3D","line":1719,"updated":"2013-06-03 17:31:36.000000000","message":"Converted here...","commit_id":"1b020f5fb77bf8927dc4749243f81f2f27340848"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"8fe29ba55e1a0fd60053f37fdff0b0c0a010b593","unresolved":false,"context_lines":[{"line_number":2328,"context_line":"                instance \u003d self._instance_update("},{"line_number":2329,"context_line":"                        context, instance[\u0027uuid\u0027],"},{"line_number":2330,"context_line":"                        task_state\u003dtask_states.STOPPING)"},{"line_number":2331,"context_line":"                self.stop_instance(context, instance\u003dinstance)"},{"line_number":2332,"context_line":""},{"line_number":2333,"context_line":"            self._notify_about_instance_usage("},{"line_number":2334,"context_line":"                    context, instance, \"resize.revert.end\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAPH%2F%2Fc04%3D","line":2331,"updated":"2013-06-03 17:31:36.000000000","message":"but not here?","commit_id":"1b020f5fb77bf8927dc4749243f81f2f27340848"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"cc1072016f3d5d7ad8bf90b1661d51c267f4da1f","unresolved":false,"context_lines":[{"line_number":2328,"context_line":"                instance \u003d self._instance_update("},{"line_number":2329,"context_line":"                        context, instance[\u0027uuid\u0027],"},{"line_number":2330,"context_line":"                        task_state\u003dtask_states.STOPPING)"},{"line_number":2331,"context_line":"                self.stop_instance(context, instance\u003dinstance)"},{"line_number":2332,"context_line":""},{"line_number":2333,"context_line":"            self._notify_about_instance_usage("},{"line_number":2334,"context_line":"                    context, instance, \"resize.revert.end\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAPH%2F%2Fcys%3D","line":2331,"updated":"2013-06-03 17:32:11.000000000","message":"To be clear... I\u0027ll reply on this patch set. :)  This spot needs to pass an object, right?","commit_id":"eb2c52a7b6e87a5699f7c6484a506c0be84a8c5c"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"3b8cf617781a8cc7d8829028e781508d3f022ff0","unresolved":false,"context_lines":[{"line_number":1445,"context_line":"    @wrap_instance_fault"},{"line_number":1446,"context_line":"    def stop_instance(self, context, instance):"},{"line_number":1447,"context_line":"        \"\"\"Stopping an instance on this host.\"\"\""},{"line_number":1448,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.start\")"},{"line_number":1449,"context_line":"        self.driver.power_off(instance)"},{"line_number":1450,"context_line":"        current_power_state \u003d self._get_power_state(context, instance)"},{"line_number":1451,"context_line":"        instance \u003d self._instance_update(context, instance[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAPX%2F%2F9Gw%3D","side":"PARENT","line":1448,"updated":"2013-06-05 09:00:40.000000000","message":"So I was checking notifications code.  And I found this in compute/utils.py:\n\n205     if system_metadata is None:\n206         system_metadata \u003d utils.metadata_to_dict(\n207                 instance_ref[\u0027system_metadata\u0027])\n\nThat hasn\u0027t been converted to use that new utils method to get sys_meta, so this will fail on new objects.  But it turns out, the notification method that this is in...is not the method that is called here.  But we\u0027ll need to fix that!","commit_id":"edf3a30aef63cd1aa2a9b1e9b08b888b4697def7"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"585edbe41a203844baceb0412ab8525f8aa245d7","unresolved":false,"context_lines":[{"line_number":1492,"context_line":"        instance.power_state \u003d current_power_state"},{"line_number":1493,"context_line":"        instance.vm_state \u003d vm_states.STOPPED"},{"line_number":1494,"context_line":"        instance.task_state \u003d None"},{"line_number":1495,"context_line":"        instance.save(expected_task_state\u003d(task_states.POWERING_OFF,"},{"line_number":1496,"context_line":"                                           task_states.STOPPING))"},{"line_number":1497,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.end\")"},{"line_number":1498,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAPX%2F%2FsTE%3D","line":1495,"updated":"2013-06-12 17:55:11.000000000","message":"Need to pass context to save(), and below as well.  It appears that every test that calls this stubs it out to not require context, but it doesn\u0027t match the actual signature of save().","commit_id":"6fcf4133b49cfefa77151937dec4db097a85c349"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"606fc4ff7e5b803b5b56d6e66153a24e6c446e83","unresolved":false,"context_lines":[{"line_number":1492,"context_line":"        instance.power_state \u003d current_power_state"},{"line_number":1493,"context_line":"        instance.vm_state \u003d vm_states.STOPPED"},{"line_number":1494,"context_line":"        instance.task_state \u003d None"},{"line_number":1495,"context_line":"        instance.save(expected_task_state\u003d(task_states.POWERING_OFF,"},{"line_number":1496,"context_line":"                                           task_states.STOPPING))"},{"line_number":1497,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.end\")"},{"line_number":1498,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAPX%2F%2FsF8%3D","line":1495,"in_reply_to":"AAAAPX%2F%2FsIE%3D","updated":"2013-06-12 18:50:53.000000000","message":"Yep, I see it in base.remotable now.","commit_id":"6fcf4133b49cfefa77151937dec4db097a85c349"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3fb725a5970a881ae15b09c74c03a699f7cdf06a","unresolved":false,"context_lines":[{"line_number":1492,"context_line":"        instance.power_state \u003d current_power_state"},{"line_number":1493,"context_line":"        instance.vm_state \u003d vm_states.STOPPED"},{"line_number":1494,"context_line":"        instance.task_state \u003d None"},{"line_number":1495,"context_line":"        instance.save(expected_task_state\u003d(task_states.POWERING_OFF,"},{"line_number":1496,"context_line":"                                           task_states.STOPPING))"},{"line_number":1497,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_off.end\")"},{"line_number":1498,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAPX%2F%2FsIE%3D","line":1495,"in_reply_to":"AAAAPX%2F%2FsTE%3D","updated":"2013-06-12 18:43:18.000000000","message":"Actually, no. The context is magically inserted in the decorator, so that we don\u0027t have to pass it to the object actions once the object obtains its own self._context. You *can* pass it, but it\u0027s optional.\n\nNote that if this was wrong, it wouldn\u0027t pass the tempest tests in jenkins which test start/stop :)","commit_id":"6fcf4133b49cfefa77151937dec4db097a85c349"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"585edbe41a203844baceb0412ab8525f8aa245d7","unresolved":false,"context_lines":[{"line_number":1512,"context_line":"        instance.power_state \u003d current_power_state"},{"line_number":1513,"context_line":"        instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":1514,"context_line":"        instance.task_state \u003d None"},{"line_number":1515,"context_line":"        instance.save(expected_task_state\u003d(task_states.POWERING_ON,"},{"line_number":1516,"context_line":"                                           task_states.STARTING))"},{"line_number":1517,"context_line":"        self._notify_about_instance_usage(context, instance, \"power_on.end\")"},{"line_number":1518,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAPX%2F%2FsTA%3D","line":1515,"updated":"2013-06-12 17:55:11.000000000","message":"Here as well.","commit_id":"6fcf4133b49cfefa77151937dec4db097a85c349"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"a9bb6767ccc545643cee40051499d989c1d1795d","unresolved":false,"context_lines":[{"line_number":589,"context_line":"    def stop_instance(self, ctxt, instance, cast\u003dTrue):"},{"line_number":590,"context_line":"        rpc_method \u003d self.cast if cast else self.call"},{"line_number":591,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":592,"context_line":"        return rpc_method(ctxt, self.make_msg(\u0027stop_instance\u0027,"},{"line_number":593,"context_line":"                instance\u003dinstance_p),"},{"line_number":594,"context_line":"                topic\u003d_compute_topic(self.topic, ctxt, None, instance))"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FixY%3D","side":"PARENT","line":592,"updated":"2013-05-30 21:02:58.000000000","message":"Should these get version bumps because you\u0027re changing what \u0027instance\u0027 is?  Maybe not because they are supposed to be backwards compatible right now?","commit_id":"18b2a0dbcbfba7ba3c0e4463d2ad095da5ab9638"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2170b545c9ca535b9bbf87bad2075f9cbdb5cf77","unresolved":false,"context_lines":[{"line_number":589,"context_line":"    def stop_instance(self, ctxt, instance, cast\u003dTrue):"},{"line_number":590,"context_line":"        rpc_method \u003d self.cast if cast else self.call"},{"line_number":591,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":592,"context_line":"        return rpc_method(ctxt, self.make_msg(\u0027stop_instance\u0027,"},{"line_number":593,"context_line":"                instance\u003dinstance_p),"},{"line_number":594,"context_line":"                topic\u003d_compute_topic(self.topic, ctxt, None, instance))"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPH%2F%2FiwE%3D","side":"PARENT","line":592,"in_reply_to":"AAAAPH%2F%2FixY%3D","updated":"2013-05-30 21:06:53.000000000","message":"Oh, yeah, I suppose so...","commit_id":"18b2a0dbcbfba7ba3c0e4463d2ad095da5ab9638"}],"nova/object/__init__.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ddd2dc2b246185ac73c422ab183d7c53e757b544","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def register_all():"},{"line_number":17,"context_line":"    # NOTE(danms): You must make sure your object gets imported in this"},{"line_number":18,"context_line":"    # function in order for it to be registered by services that may"},{"line_number":19,"context_line":"    # need to receive it via RPC."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Ftjc%3D","line":16,"updated":"2013-05-24 18:19:09.000000000","message":"Is there any way to test if this isn\u0027t called, like if someone screws up and removes it from the code that is calling it?  Or will the test just fail implicitly?","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b059ff2f1af68a52ce1316109d5a21270109c19","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def register_all():"},{"line_number":17,"context_line":"    # NOTE(danms): You must make sure your object gets imported in this"},{"line_number":18,"context_line":"    # function in order for it to be registered by services that may"},{"line_number":19,"context_line":"    # need to receive it via RPC."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FtVA%3D","line":16,"in_reply_to":"AAAAPH%2F%2Fte0%3D","updated":"2013-05-24 20:04:23.000000000","message":"I can also buy this.","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5fa102eed5382a23712ae73091fc0267488f48ad","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"def register_all():"},{"line_number":17,"context_line":"    # NOTE(danms): You must make sure your object gets imported in this"},{"line_number":18,"context_line":"    # function in order for it to be registered by services that may"},{"line_number":19,"context_line":"    # need to receive it via RPC."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fte0%3D","line":16,"in_reply_to":"AAAAPH%2F%2Ftjc%3D","updated":"2013-05-24 18:48:13.000000000","message":"Well, unfortunately, it won\u0027t fail until someone sends an object to a service that isn\u0027t registered. However, no amount of testing should succeed for a new service that starts to use objects but doesn\u0027t register for them. Since this is once per service, and there aren\u0027t that many services, I think it\u0027s probably rather low-risk :)","commit_id":"f1f624ffe0d19bed5480a897eb043678a617cbc2"}],"nova/tests/compute/test_compute.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"47bfddb094cc944f3f5dc0fc349455c99139c9a8","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        return db.instance_create(self.context, inst)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def _create_instance_obj(self, params\u003dNone,"},{"line_number":257,"context_line":"            type_name\u003d\u0027m1.tiny\u0027):"},{"line_number":258,"context_line":"        \"\"\"Create a test instance object.\"\"\""},{"line_number":259,"context_line":"        instance \u003d instance_obj.Instance()"},{"line_number":260,"context_line":"        instance.uuid \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2FmEk%3D","line":257,"updated":"2013-05-29 17:40:47.000000000","message":"I don\u0027t think this is over 80 columns so you don\u0027t need to wrap it.","commit_id":"22b08fbafc8348b7fb296d168b257a348f5ebb89"}]}
