)]}'
{"nova/objects/instance.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"c9f92403a72909afba3308cff338ff515016c3cb","unresolved":false,"context_lines":[{"line_number":44,"context_line":"# These are all fields that most query calls load by default"},{"line_number":45,"context_line":"INSTANCE_DEFAULT_FIELDS \u003d (INSTANCE_OPTIONAL_COMMON_FIELDS +"},{"line_number":46,"context_line":"                           INSTANCE_IMPLIED_FIELDS)"},{"line_number":47,"context_line":"DEFAULT \u003d \u0027DEFAULT\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class Instance(base.NovaPersistentObject, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAS3%2F%2F%2BgQ%3D","line":47,"updated":"2013-09-16 08:56:52.000000000","message":"Please add this in nova.compute.task_states and use from there.","commit_id":"cd875f1883b5c88426fed75536001a64b6ef9037"},{"author":{"_account_id":1782,"name":"Kravchenko Pavel","email":"kpavel@il.ibm.com","username":"kravchenko-pavel"},"change_message_id":"f0ae6a1c5aba4d82304f7c76130fbbfb485378b3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"# These are all fields that most query calls load by default"},{"line_number":45,"context_line":"INSTANCE_DEFAULT_FIELDS \u003d (INSTANCE_OPTIONAL_COMMON_FIELDS +"},{"line_number":46,"context_line":"                           INSTANCE_IMPLIED_FIELDS)"},{"line_number":47,"context_line":"DEFAULT \u003d \u0027DEFAULT\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class Instance(base.NovaPersistentObject, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAS3%2F%2F%2Bc8%3D","line":47,"in_reply_to":"AAAAS3%2F%2F%2BgQ%3D","updated":"2013-09-16 09:16:42.000000000","message":"I\u0027m not sure this constant should reside in the task_states. It\u0027s not used as task state and shouldn\u0027t be used by others as task state. It just used in this single function to separate between two cases: when the expected value is None and when there no expected value at all.","commit_id":"cd875f1883b5c88426fed75536001a64b6ef9037"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"800d5fb82a8eeaadae168231a61854e851f0c90b","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    @base.remotable"},{"line_number":378,"context_line":"    def save(self, context, expected_vm_state\u003dNone,"},{"line_number":379,"context_line":"             expected_task_state\u003dDEFAULT, admin_state_reset\u003dFalse):"},{"line_number":380,"context_line":"        \"\"\"Save updates to this instance"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        Column-wise updates will be made based on the result of"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FJ9A%3D","line":379,"updated":"2013-10-22 11:42:38.000000000","message":"Hmm, the idiomatic way of handling this is something like:\n\n  _marker \u003d object()\n\n  def save(self, ..., expected_task_state\u003d_marker, ...)\n\n      if expected_task_state is not self._marker:\n          ...\n\nI\u0027d prefer this approach than using a magic string value\n\nAlso, why not do the same for expected_vm_state ?","commit_id":"c94b538bae62c747e19c0fd615294410aa883032"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"47031198077dcdd717c4c709dca60c9530a8c332","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    # Version 1.8: \u0027security_groups\u0027 and \u0027pci_devices\u0027 cannot be None"},{"line_number":71,"context_line":"    # Version 1.9: Make uuid a non-None real string"},{"line_number":72,"context_line":"    # Version 1.10: Make save() to handle correctly None value of"},{"line_number":73,"context_line":"    #               expected_task_state"},{"line_number":74,"context_line":"    VERSION \u003d \u00271.10\u0027"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2FJv4%3D","line":73,"updated":"2013-10-22 12:35:32.000000000","message":"and expected_vm_state","commit_id":"4229c975a09e140eb95444e49df23f392c81c6e3"},{"author":{"_account_id":1782,"name":"Kravchenko Pavel","email":"kpavel@il.ibm.com","username":"kravchenko-pavel"},"change_message_id":"5fb045759670621dcf48268b8fda751cad1609d4","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    # Version 1.8: \u0027security_groups\u0027 and \u0027pci_devices\u0027 cannot be None"},{"line_number":71,"context_line":"    # Version 1.9: Make uuid a non-None real string"},{"line_number":72,"context_line":"    # Version 1.10: Make save() to handle correctly None value of"},{"line_number":73,"context_line":"    #               expected_task_state"},{"line_number":74,"context_line":"    VERSION \u003d \u00271.10\u0027"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2FJP0%3D","line":73,"in_reply_to":"AAAATH%2F%2FJv4%3D","updated":"2013-10-22 14:58:44.000000000","message":"Done","commit_id":"4229c975a09e140eb95444e49df23f392c81c6e3"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"a822b20dd1d5d0e28ed1eb954fc8014489fe6dc3","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            def _handle_cell_update_from_api():"},{"line_number":370,"context_line":"                cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":371,"context_line":"                cells_api.instance_update_from_api(context, stale_instance,"},{"line_number":372,"context_line":"                        expected_vm_state,"},{"line_number":373,"context_line":"                        expected_task_state,"},{"line_number":374,"context_line":"                        admin_state_reset)"},{"line_number":375,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FI8M%3D","line":372,"updated":"2013-10-22 16:09:31.000000000","message":"Passing _marker to this function doesn\u0027t seem right - nor would sending \u0027DEFAULT\u0027\n\ni.e. don\u0027t you also need to add support for vm_state/task_state \u003d\u003d None to instance_update_from_api() ?\n\nI could see a \"that\u0027s someone else\u0027s problem\" argument and we retain the old behaviour here by doing:\n\n  # FIXME(...): these states should be optional args to instance_update_from_api()\n  def none_if_marker(state):\n      return None if state is self._marker else None\n\n  instance_update_from_api(...\n            none_if_marker(expected_vm_state),\n            none_if_marker(expected_task_state),\n\nBut it\u0027s pretty ugly","commit_id":"bcd48f69feb62953e9a54b68acb271525f3565bf"},{"author":{"_account_id":1782,"name":"Kravchenko Pavel","email":"kpavel@il.ibm.com","username":"kravchenko-pavel"},"change_message_id":"b15ae112a50705d78e86d746a60968d36bfe60c6","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            def _handle_cell_update_from_api():"},{"line_number":370,"context_line":"                cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":371,"context_line":"                cells_api.instance_update_from_api(context, stale_instance,"},{"line_number":372,"context_line":"                        expected_vm_state,"},{"line_number":373,"context_line":"                        expected_task_state,"},{"line_number":374,"context_line":"                        admin_state_reset)"},{"line_number":375,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATX%2F%2F%2BtI%3D","line":372,"in_reply_to":"AAAATH%2F%2FI8M%3D","updated":"2013-10-23 11:36:50.000000000","message":"You right, it would be wrong to send _marker to this function, but i don\u0027t think that passing None there right as well. Here we have exactly same problem that this patch resolves in instance.save(), but not it\u0027s in instance_update_from_api().\n\nI see here 2 options for solution:\n\n1. Return to \"magic\" String \"DEFAULT\" because it does solves the problem from what i see. Eventually it calls instance.save() and the magic string would be handled there correctly.\n\n2. Much more complicate: change the signature of instance.save() and instance_update_from_api() (in cells rpcapi/messaging/manager) and of course all the calls to save() and make the instance/task states be passed in dictionary instead of optional arguments..","commit_id":"bcd48f69feb62953e9a54b68acb271525f3565bf"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"e39d2daa3319ceb9255c8423be144641b6e0e393","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            def _handle_cell_update_from_api():"},{"line_number":370,"context_line":"                cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":371,"context_line":"                cells_api.instance_update_from_api(context, stale_instance,"},{"line_number":372,"context_line":"                        expected_vm_state,"},{"line_number":373,"context_line":"                        expected_task_state,"},{"line_number":374,"context_line":"                        admin_state_reset)"},{"line_number":375,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F7Iw%3D","line":372,"in_reply_to":"AAAATX%2F%2F%2BtI%3D","updated":"2013-10-25 06:43:18.000000000","message":"Passing None may be wrong, but it\u0027s the current behaviour - i.e I\u0027d prefer to preserve the current wrong behaviour rather than do something even more wrong\n\nAs for the two options:\n\n1. I really don\u0027t want to see a magic string like this ever be sent over the wire - it\u0027s one thing using a string as a magic value internally, but making it part of the over-the-wire interface is nasty\n\n2. Yeah, that would work\n\nThere\u0027s a third:\n\n3. Make every method between this call in the api cell and the eventual call in the child cell also understand the difference between None and \"no value\" using this same marker approach, and also to only pass on a value to the next method if a value was actually supplied e.g. in rpcapi\n\n    def instance_update_from_api(self, ctxt, instance, expected_vm_state\u003d_marker,\n                                 expected_task_state\u003d_marker, admin_state_reset):\n\n        kwargs \u003d dict(instance\u003dinstance, admin_state_reset\u003dadmin_state_reset)\n        if expected_vm_state is not self._marker:\n            kwargs[\u0027expected_vm_state\u0027] \u003d expected_vm_state\n        ...\n        cctxt.cast(ctxt, \u0027instance_update_from_api\u0027, **kwargs)\n\nand you\u0027d also need to do this in cells manager and message runner.\n\n\nI reckon plan (2) is probably best.\n\nI\u0027d do:\n\n    def save(self, context, expected_vm_state\u003d_marker,\n             expected_task_state\u003d_marker, admin_state_reset\u003dFalse,\n             expected_states\u003dNone):\n\n        if expected_states is None:\n            expected_states \u003d {}\n            if expected_vm_state is not self._marker:\n                expected_states[\u0027vm_state\u0027] \u003d expected_vm_state\n            if expected_task_state is not self._marker:\n                expected_states[\u0027task_state\u0027] \u003d expected_task_state\n\nand then change the rest of the code to use the dict rather than the kwargs","commit_id":"bcd48f69feb62953e9a54b68acb271525f3565bf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5c5ad59119408e140133dc07018b908f34599b06","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        }"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"},{"line_number":162,"context_line":"    _marker \u003d object()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":165,"context_line":"        super(Instance, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F0NQ%3D","line":162,"updated":"2013-10-28 15:22:28.000000000","message":"This won\u0027t work across RPC. The sentinel on, say, a compute node will not match the sentinel on, say, a conductor node.","commit_id":"4168c482b7e979905f7048b36bbafd4d7409b611"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5c5ad59119408e140133dc07018b908f34599b06","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    @base.remotable"},{"line_number":339,"context_line":"    def save(self, context, expected_vm_state\u003d_marker,"},{"line_number":340,"context_line":"             expected_task_state\u003d_marker, admin_state_reset\u003dFalse,"},{"line_number":341,"context_line":"             expected_states\u003dNone):"},{"line_number":342,"context_line":"        \"\"\"Save updates to this instance"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        Column-wise updates will be made based on the result of"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F0Nw%3D","line":341,"updated":"2013-10-28 15:22:28.000000000","message":"This expected_states thing is adding cruft, IMHO. It also adds an unversioned protocol which is asking for trouble in the future with respect to operating multiple versions of the code in the same deployment.","commit_id":"4168c482b7e979905f7048b36bbafd4d7409b611"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"118c69cefdb61f0aba2ecee50c61a310dd120d3d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"# These are fields that most query calls load by default"},{"line_number":48,"context_line":"INSTANCE_DEFAULT_FIELDS \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027,"},{"line_number":49,"context_line":"                           \u0027info_cache\u0027, \u0027security_groups\u0027]"},{"line_number":50,"context_line":"DEFAULT \u003d \u0027DEFAULT\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def _expected_cols(expected_attrs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2Fz1M%3D","line":50,"updated":"2013-10-28 17:37:01.000000000","message":"I think this needs to be something other than what looks like it could be a valid state someday. How about \"NOT_SPECIFIED_SENTINEL\" ?","commit_id":"81da946815b5bc426517e8581263d9a1f39c5dd0"}],"nova/tests/objects/test_instance.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"36df6d660ce514bd55e17868b55866c157b9d631","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        new_ref \u003d dict(old_ref, host\u003d\u0027newhost\u0027, **expected_updates)"},{"line_number":210,"context_line":"        exp_vm_state \u003d save_kwargs.get(\u0027expected_vm_state\u0027)"},{"line_number":211,"context_line":"        if \u0027expected_task_state\u0027 in save_kwargs:"},{"line_number":212,"context_line":"            exp_task_state \u003d save_kwargs.get(\u0027expected_task_state\u0027)"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            exp_task_state \u003d \u0027DEFAULT\u0027"},{"line_number":215,"context_line":"        admin_reset \u003d save_kwargs.get(\u0027admin_state_reset\u0027, False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2F4Sg%3D","line":212,"updated":"2013-09-17 19:39:10.000000000","message":"This would be much cleaner as:\n\n save_kwargs.get(\u0027expected_task_state\u0027, \u0027DEFAULT\u0027)\n\nAlso, please reference the actual DEFAULT constant in objects/instance.","commit_id":"f357ce9b1fac390e4dda6746363bd2963d944aa8"},{"author":{"_account_id":1782,"name":"Kravchenko Pavel","email":"kpavel@il.ibm.com","username":"kravchenko-pavel"},"change_message_id":"250fc2a2a30036057bf1bfdddcf84ab312644878","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        new_ref \u003d dict(old_ref, host\u003d\u0027newhost\u0027, **expected_updates)"},{"line_number":210,"context_line":"        exp_vm_state \u003d save_kwargs.get(\u0027expected_vm_state\u0027)"},{"line_number":211,"context_line":"        if \u0027expected_task_state\u0027 in save_kwargs:"},{"line_number":212,"context_line":"            exp_task_state \u003d save_kwargs.get(\u0027expected_task_state\u0027)"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            exp_task_state \u003d \u0027DEFAULT\u0027"},{"line_number":215,"context_line":"        admin_reset \u003d save_kwargs.get(\u0027admin_state_reset\u0027, False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2F3hI%3D","line":212,"in_reply_to":"AAAAS3%2F%2F4Sg%3D","updated":"2013-09-18 00:02:13.000000000","message":"Done","commit_id":"f357ce9b1fac390e4dda6746363bd2963d944aa8"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"5b410f8cc560020d834bc150baa28f8e93e11873","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        admin_reset \u003d save_kwargs.get(\u0027admin_state_reset\u0027, False)"},{"line_number":214,"context_line":"        if exp_vm_state:"},{"line_number":215,"context_line":"            expected_updates[\u0027expected_vm_state\u0027] \u003d exp_vm_state"},{"line_number":216,"context_line":"        if exp_task_state is not \u0027DEFAULT\u0027:"},{"line_number":217,"context_line":"            expected_updates[\u0027expected_task_state\u0027] \u003d exp_task_state"},{"line_number":218,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_get_by_uuid\u0027)"},{"line_number":219,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_update_and_get_original\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2Ffg4%3D","line":216,"updated":"2013-09-25 19:12:10.000000000","message":"This should be \u0027!\u003d\u0027 not \u0027is not\u0027.  You should not assume that strings are interned.","commit_id":"b3246f5a003574547e4e5324470c9b36c1cf1601"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"47031198077dcdd717c4c709dca60c9530a8c332","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        admin_reset \u003d save_kwargs.get(\u0027admin_state_reset\u0027, False)"},{"line_number":243,"context_line":"        if exp_vm_state !\u003d instance.Instance._marker:"},{"line_number":244,"context_line":"            expected_updates[\u0027expected_vm_state\u0027] \u003d exp_vm_state"},{"line_number":245,"context_line":"        if exp_task_state !\u003d instance.Instance._marker:"},{"line_number":246,"context_line":"            expected_updates[\u0027expected_task_state\u0027] \u003d exp_task_state"},{"line_number":247,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_get_by_uuid\u0027)"},{"line_number":248,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_update_and_get_original\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2FJvw%3D","line":245,"updated":"2013-10-22 12:35:32.000000000","message":"The _marker attribute shouldn\u0027t be used outside the class\n\nI\u0027d do:\n\n  if \u0027expected_vm_state\u0027 in save_kwargs:\n      expected_updates[\u0027expected_vm_state\u0027] \u003d save_kwargs[\u0027expected_vm_state\u0027]","commit_id":"4229c975a09e140eb95444e49df23f392c81c6e3"},{"author":{"_account_id":1782,"name":"Kravchenko Pavel","email":"kpavel@il.ibm.com","username":"kravchenko-pavel"},"change_message_id":"5fb045759670621dcf48268b8fda751cad1609d4","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        admin_reset \u003d save_kwargs.get(\u0027admin_state_reset\u0027, False)"},{"line_number":243,"context_line":"        if exp_vm_state !\u003d instance.Instance._marker:"},{"line_number":244,"context_line":"            expected_updates[\u0027expected_vm_state\u0027] \u003d exp_vm_state"},{"line_number":245,"context_line":"        if exp_task_state !\u003d instance.Instance._marker:"},{"line_number":246,"context_line":"            expected_updates[\u0027expected_task_state\u0027] \u003d exp_task_state"},{"line_number":247,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_get_by_uuid\u0027)"},{"line_number":248,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_update_and_get_original\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2FJPw%3D","line":245,"in_reply_to":"AAAATH%2F%2FJvw%3D","updated":"2013-10-22 14:58:44.000000000","message":"Done","commit_id":"4229c975a09e140eb95444e49df23f392c81c6e3"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"a822b20dd1d5d0e28ed1eb954fc8014489fe6dc3","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            cells_rpcapi.CellsAPI().AndReturn(cells_api_mock)"},{"line_number":267,"context_line":"            cells_api_mock.instance_update_from_api("},{"line_number":268,"context_line":"                    self.context, mox.IsA(instance.Instance),"},{"line_number":269,"context_line":"                    exp_vm_state, exp_task_state, admin_reset)"},{"line_number":270,"context_line":"        elif cell_type \u003d\u003d \u0027compute\u0027:"},{"line_number":271,"context_line":"            cells_rpcapi.CellsAPI().AndReturn(cells_api_mock)"},{"line_number":272,"context_line":"            cells_api_mock.instance_update_at_top(self.context, new_ref)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FI8k%3D","side":"PARENT","line":269,"updated":"2013-10-22 16:09:31.000000000","message":"You should avoid passing these arguments at all if they\u0027re note needed, rather than trying to pass _marker","commit_id":"19ea0c8c83b20692ee1e7572079388cbd9d8681a"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"a822b20dd1d5d0e28ed1eb954fc8014489fe6dc3","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        exp_vm_state \u003d save_kwargs.get(\u0027expected_vm_state\u0027,"},{"line_number":239,"context_line":"                                         instance.Instance._marker)"},{"line_number":240,"context_line":"        exp_task_state \u003d save_kwargs.get(\u0027expected_task_state\u0027,"},{"line_number":241,"context_line":"                                         instance.Instance._marker)"},{"line_number":242,"context_line":"        admin_reset \u003d save_kwargs.get(\u0027admin_state_reset\u0027, False)"},{"line_number":243,"context_line":"        if \u0027expected_vm_state\u0027 in save_kwargs:"},{"line_number":244,"context_line":"            expected_updates[\u0027expected_vm_state\u0027] \u003d save_kwargs["}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FI9Q%3D","line":241,"updated":"2013-10-22 16:09:31.000000000","message":"Again, the _marker attribute should not be used outside the class - it is a private implementation detail","commit_id":"bcd48f69feb62953e9a54b68acb271525f3565bf"}]}
