)]}'
{"nova/compute/api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"44edc13d151de800e5189de7fc8e56c48b2f5e8c","unresolved":false,"context_lines":[{"line_number":2193,"context_line":"                    \u0027snapshot\u0027)"},{"line_number":2194,"context_line":"            image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":2195,"context_line":""},{"line_number":2196,"context_line":"        self.compute_rpcapi.shelve_instance(context, instance\u003dinstance,"},{"line_number":2197,"context_line":"                image_id\u003dimage_id)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    @wrap_check_policy"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Fudk%3D","line":2196,"updated":"2013-07-12 11:42:15.000000000","message":"Would it be simpler to just always shelve_offload volume backed instances, so the image_id is not optional any more.","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5bea80c8bbf8d2ca9c71adc42c742827cf13cbfc","unresolved":false,"context_lines":[{"line_number":2193,"context_line":"                    \u0027snapshot\u0027)"},{"line_number":2194,"context_line":"            image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":2195,"context_line":""},{"line_number":2196,"context_line":"        self.compute_rpcapi.shelve_instance(context, instance\u003dinstance,"},{"line_number":2197,"context_line":"                image_id\u003dimage_id)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    @wrap_check_policy"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FuIU%3D","line":2196,"in_reply_to":"AAAAP3%2F%2Fudk%3D","updated":"2013-07-12 13:36:42.000000000","message":"Just requires putting a power state check and possible power down into shelve_offload.  Seems to be a fair trade though.","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"387fd8b033145ba22f126f1e97cdfb263674724c","unresolved":false,"context_lines":[{"line_number":2222,"context_line":"        bdms \u003d self.get_instance_bdms(context, instance)"},{"line_number":2223,"context_line":"        if not self.is_volume_backed_instance(context, instance, bdms):"},{"line_number":2224,"context_line":"            name \u003d \u0027%s-shelved\u0027 % instance[\u0027name\u0027]"},{"line_number":2225,"context_line":"            image_meta \u003d self._create_image(context, instance, name,"},{"line_number":2226,"context_line":"                    \u0027snapshot\u0027)"},{"line_number":2227,"context_line":"            image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":2228,"context_line":"            self.compute_rpcapi.shelve_instance(context, instance\u003dinstance,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2FpBE%3D","line":2225,"updated":"2013-07-15 14:22:14.000000000","message":"I think we decided these snapshots need \"protecting\" from deletion while the image is in the \"shelved\" related state.\n\nI guess that needs some kind of glance feature we don\u0027t have yet? Either way, something for a separate change I guess.","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5bf9d7b254997f5980b6250786e6205f46d639cb","unresolved":false,"context_lines":[{"line_number":2222,"context_line":"        bdms \u003d self.get_instance_bdms(context, instance)"},{"line_number":2223,"context_line":"        if not self.is_volume_backed_instance(context, instance, bdms):"},{"line_number":2224,"context_line":"            name \u003d \u0027%s-shelved\u0027 % instance[\u0027name\u0027]"},{"line_number":2225,"context_line":"            image_meta \u003d self._create_image(context, instance, name,"},{"line_number":2226,"context_line":"                    \u0027snapshot\u0027)"},{"line_number":2227,"context_line":"            image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":2228,"context_line":"            self.compute_rpcapi.shelve_instance(context, instance\u003dinstance,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2FoAI%3D","line":2225,"in_reply_to":"AAAAP3%2F%2Fo3c%3D","updated":"2013-07-15 17:54:10.000000000","message":"+1, need to track this somehow I guess.","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1c1cd761308e16b9f65d6224631a96fde317972e","unresolved":false,"context_lines":[{"line_number":2222,"context_line":"        bdms \u003d self.get_instance_bdms(context, instance)"},{"line_number":2223,"context_line":"        if not self.is_volume_backed_instance(context, instance, bdms):"},{"line_number":2224,"context_line":"            name \u003d \u0027%s-shelved\u0027 % instance[\u0027name\u0027]"},{"line_number":2225,"context_line":"            image_meta \u003d self._create_image(context, instance, name,"},{"line_number":2226,"context_line":"                    \u0027snapshot\u0027)"},{"line_number":2227,"context_line":"            image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":2228,"context_line":"            self.compute_rpcapi.shelve_instance(context, instance\u003dinstance,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2Fo3c%3D","line":2225,"in_reply_to":"AAAAP3%2F%2FpBE%3D","updated":"2013-07-15 14:51:48.000000000","message":"Yep, definitely.  I\u0027m not aware of any way for Nova to communicate with Glance in such a way that these snapshots can be used for unshelving, while not visible and/or modifiable through /images.","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"}],"nova/compute/manager.py":[{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"a93ef977d6b9213d6e4b58f6f3c2259d1a189d38","unresolved":false,"context_lines":[{"line_number":2889,"context_line":"                        task_state\u003dtask_state,"},{"line_number":2890,"context_line":"                        expected_task_state\u003dexp_state)"},{"line_number":2891,"context_line":""},{"line_number":2892,"context_line":"            self.driver.snapshot(context, instance, image_id,"},{"line_number":2893,"context_line":"                    update_task_state)"},{"line_number":2894,"context_line":""},{"line_number":2895,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fve4%3D","line":2892,"updated":"2013-06-23 14:23:25.000000000","message":"Will this work in all states - for example for an instance that is already stopped ?","commit_id":"29e5744b9112247ebf8c27f1c18326555f1b1d23"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ca866b06dad72f26e0e74099b82aa4d949df2f70","unresolved":false,"context_lines":[{"line_number":2889,"context_line":"                        task_state\u003dtask_state,"},{"line_number":2890,"context_line":"                        expected_task_state\u003dexp_state)"},{"line_number":2891,"context_line":""},{"line_number":2892,"context_line":"            self.driver.snapshot(context, instance, image_id,"},{"line_number":2893,"context_line":"                    update_task_state)"},{"line_number":2894,"context_line":""},{"line_number":2895,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Ftdg%3D","line":2892,"in_reply_to":"AAAAPn%2F%2Fve4%3D","updated":"2013-06-24 20:15:45.000000000","message":"Honestly, I don\u0027t know.  To some extent that\u0027s going to depend on the driver in use but I don\u0027t have a definitive answer for any of them.  I copied the instance state checks from the current createImage/snapshot call.  As far as I can tell, it will work but log a warning if it\u0027s stopped, at least in libvirt.","commit_id":"29e5744b9112247ebf8c27f1c18326555f1b1d23"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"835dc5848d911e698c344f03f9ad232192fd9dfe","unresolved":false,"context_lines":[{"line_number":2938,"context_line":"                context, instance)"},{"line_number":2939,"context_line":"        self.driver.destroy(instance, self._legacy_nw_info(network_info),"},{"line_number":2940,"context_line":"                block_device_info)"},{"line_number":2941,"context_line":"        self._instance_update(context, instance[\u0027uuid\u0027],"},{"line_number":2942,"context_line":"                vm_state\u003dvm_states.SHELVED_OFF, task_state\u003dNone,"},{"line_number":2943,"context_line":"                expected_task_states\u003dtask_states.SHELVING_OFFLOADING)"},{"line_number":2944,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2Fay0%3D","line":2941,"updated":"2013-07-02 12:10:34.000000000","message":"Doesn\u0027t this also need to clear instance[\u0027host\u0027] so that the shelved instance is no longer associated with the host from a capacity and image cache perspective ?\n\nI would also expect to see the image files associated with the instance being deleted at this point.","commit_id":"a30a23b7714327bd36231452f9557e0869167e14"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"c2985c7306b5c884adb615fad8e8d66cd67becfb","unresolved":false,"context_lines":[{"line_number":2938,"context_line":"                context, instance)"},{"line_number":2939,"context_line":"        self.driver.destroy(instance, self._legacy_nw_info(network_info),"},{"line_number":2940,"context_line":"                block_device_info)"},{"line_number":2941,"context_line":"        self._instance_update(context, instance[\u0027uuid\u0027],"},{"line_number":2942,"context_line":"                vm_state\u003dvm_states.SHELVED_OFF, task_state\u003dNone,"},{"line_number":2943,"context_line":"                expected_task_states\u003dtask_states.SHELVING_OFFLOADING)"},{"line_number":2944,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FakI%3D","line":2941,"in_reply_to":"AAAAPn%2F%2Fay0%3D","updated":"2013-07-02 13:30:31.000000000","message":"Clearing instance[\u0027host\u0027] is probably the right thing to do.  The issue that comes up then is how can periodic tasks be run over offloaded instances, which is something we\u0027d like to do.  It would be really helpful for a compute to retain some sort of \u0027ownership\u0027 over an instance until it\u0027s built on another host.  Maybe \u0027host\u0027 isn\u0027t the best way to do it, but I\u0027d like to solve that somehow.\n\nWhich image files do you mean?  Doesn\u0027t self.driver.destroy() handle cleanup appropriately?","commit_id":"a30a23b7714327bd36231452f9557e0869167e14"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"ffe16eb1a7856e41235b23ea06983183ea31f514","unresolved":false,"context_lines":[{"line_number":2936,"context_line":"    @reverts_task_state"},{"line_number":2937,"context_line":"    @wrap_instance_event"},{"line_number":2938,"context_line":"    @wrap_instance_fault"},{"line_number":2939,"context_line":"    def shelve_instance(self, context, instance, image_id\u003dNone):"},{"line_number":2940,"context_line":"        \"\"\"Shelve the instance."},{"line_number":2941,"context_line":""},{"line_number":2942,"context_line":"        :param context: request context"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FWt4%3D","line":2939,"updated":"2013-07-03 13:27:01.000000000","message":"I wonder if this should be synchronised on the uuid to avoid nasty race conditions with things like rebuild, etc ?","commit_id":"ed5aedab6e3eb73bac52bf1b5c634be0cfd76559"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"44edc13d151de800e5189de7fc8e56c48b2f5e8c","unresolved":false,"context_lines":[{"line_number":2960,"context_line":"                        task_state\u003dtask_state,"},{"line_number":2961,"context_line":"                        expected_task_state\u003dexp_state)"},{"line_number":2962,"context_line":""},{"line_number":2963,"context_line":"            self.driver.snapshot(context, instance, image_id,"},{"line_number":2964,"context_line":"                    update_task_state)"},{"line_number":2965,"context_line":""},{"line_number":2966,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Fucs%3D","line":2963,"updated":"2013-07-12 11:42:15.000000000","message":"I think we should power off before we do the snapshot.","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5bea80c8bbf8d2ca9c71adc42c742827cf13cbfc","unresolved":false,"context_lines":[{"line_number":2960,"context_line":"                        task_state\u003dtask_state,"},{"line_number":2961,"context_line":"                        expected_task_state\u003dexp_state)"},{"line_number":2962,"context_line":""},{"line_number":2963,"context_line":"            self.driver.snapshot(context, instance, image_id,"},{"line_number":2964,"context_line":"                    update_task_state)"},{"line_number":2965,"context_line":""},{"line_number":2966,"context_line":"        self.driver.power_off(instance)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FuLk%3D","line":2963,"in_reply_to":"AAAAP3%2F%2Fucs%3D","updated":"2013-07-12 13:36:42.000000000","message":"That sounds right to me to.  I went this direction because snapshot() logs a warning about snapshotting a non-running instance, and I wasn\u0027t sure why.  But it seems that both libvirt and xenapi should still snapshot properly after power off.  I will change this.","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"44edc13d151de800e5189de7fc8e56c48b2f5e8c","unresolved":false,"context_lines":[{"line_number":2992,"context_line":"        network_info \u003d self._get_instance_nw_info(context, instance)"},{"line_number":2993,"context_line":"        block_device_info \u003d self._get_instance_volume_block_device_info("},{"line_number":2994,"context_line":"                context, instance)"},{"line_number":2995,"context_line":"        self.driver.destroy(instance, self._legacy_nw_info(network_info),"},{"line_number":2996,"context_line":"                block_device_info)"},{"line_number":2997,"context_line":"        self._instance_update(context, instance[\u0027uuid\u0027], host\u003dNone, node\u003dNone,"},{"line_number":2998,"context_line":"                vm_state\u003dvm_states.SHELVED_OFFLOADED, task_state\u003dNone,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Fuds%3D","line":2995,"updated":"2013-07-12 11:42:15.000000000","message":"Just checking, but I assume Cinder will _not_ get notified that the volume has been detached? And the volume will only be detached _not_ destroyed. And the networking stack will _not_ return the IP address to the usual pool?","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5bea80c8bbf8d2ca9c71adc42c742827cf13cbfc","unresolved":false,"context_lines":[{"line_number":2992,"context_line":"        network_info \u003d self._get_instance_nw_info(context, instance)"},{"line_number":2993,"context_line":"        block_device_info \u003d self._get_instance_volume_block_device_info("},{"line_number":2994,"context_line":"                context, instance)"},{"line_number":2995,"context_line":"        self.driver.destroy(instance, self._legacy_nw_info(network_info),"},{"line_number":2996,"context_line":"                block_device_info)"},{"line_number":2997,"context_line":"        self._instance_update(context, instance[\u0027uuid\u0027], host\u003dNone, node\u003dNone,"},{"line_number":2998,"context_line":"                vm_state\u003dvm_states.SHELVED_OFFLOADED, task_state\u003dNone,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FuKg%3D","line":2995,"in_reply_to":"AAAAP3%2F%2Fuds%3D","updated":"2013-07-12 13:36:42.000000000","message":"Correct.  Maybe down the road there can be some level of co-ordination so that appropriate states can be set in Cinder/Neutron, but for now they\u0027ll just stay untouched.","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"44edc13d151de800e5189de7fc8e56c48b2f5e8c","unresolved":false,"context_lines":[{"line_number":3027,"context_line":"        # NOTE(alaski): Turn off or remove some keys that may cause unwanted"},{"line_number":3028,"context_line":"        # modifications."},{"line_number":3029,"context_line":"        instance[\u0027key_data\u0027] \u003d None"},{"line_number":3030,"context_line":"        instance[\u0027auto_disk_config\u0027] \u003d None"},{"line_number":3031,"context_line":"        try:"},{"line_number":3032,"context_line":"            self.driver.spawn(context, instance, image, injected_files\u003d[],"},{"line_number":3033,"context_line":"                    admin_password\u003dNone,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FueU%3D","line":3030,"updated":"2013-07-12 11:42:15.000000000","message":"Nasty, but I can\u0027t see a better way.\n\nJust an idea, but would could make this self documenting, by having a method called _unset_unshelve_unsafe_instance_keys or something similar. But that might looks worse...","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5bea80c8bbf8d2ca9c71adc42c742827cf13cbfc","unresolved":false,"context_lines":[{"line_number":3027,"context_line":"        # NOTE(alaski): Turn off or remove some keys that may cause unwanted"},{"line_number":3028,"context_line":"        # modifications."},{"line_number":3029,"context_line":"        instance[\u0027key_data\u0027] \u003d None"},{"line_number":3030,"context_line":"        instance[\u0027auto_disk_config\u0027] \u003d None"},{"line_number":3031,"context_line":"        try:"},{"line_number":3032,"context_line":"            self.driver.spawn(context, instance, image, injected_files\u003d[],"},{"line_number":3033,"context_line":"                    admin_password\u003dNone,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FuKU%3D","line":3030,"in_reply_to":"AAAAP3%2F%2FueU%3D","updated":"2013-07-12 13:36:42.000000000","message":"That could work, I\u0027ll try it out.","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"32d88ab4c91e746624762a2c673c51b617bef21f","unresolved":false,"context_lines":[{"line_number":3111,"context_line":"    def _unshelve_instance_key_restore(self, instance, keys):"},{"line_number":3112,"context_line":"        \"\"\"Restore previously scrubbed keys before saving the instance.\"\"\""},{"line_number":3113,"context_line":"        for key in keys:"},{"line_number":3114,"context_line":"            setattr(instance, key, keys[key])"},{"line_number":3115,"context_line":""},{"line_number":3116,"context_line":"    def _unshelve_instance(self, context, instance, image):"},{"line_number":3117,"context_line":"        self._notify_about_instance_usage(context, instance, \u0027unshelve.start\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAP3%2F%2FnIM%3D","line":3114,"updated":"2013-07-15 21:03:43.000000000","message":"Note that you can do instance.update(keys) instead of this helper.","commit_id":"d287237a222dfd15cf27b6b9301eef33bda603a1"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"be02bde36d7fb522fdef8a5d5e096e7ac2464be5","unresolved":false,"context_lines":[{"line_number":3111,"context_line":"    def _unshelve_instance_key_restore(self, instance, keys):"},{"line_number":3112,"context_line":"        \"\"\"Restore previously scrubbed keys before saving the instance.\"\"\""},{"line_number":3113,"context_line":"        for key in keys:"},{"line_number":3114,"context_line":"            setattr(instance, key, keys[key])"},{"line_number":3115,"context_line":""},{"line_number":3116,"context_line":"    def _unshelve_instance(self, context, instance, image):"},{"line_number":3117,"context_line":"        self._notify_about_instance_usage(context, instance, \u0027unshelve.start\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAP3%2F%2FnEg%3D","line":3114,"in_reply_to":"AAAAP3%2F%2FnIM%3D","updated":"2013-07-15 21:16:37.000000000","message":"Your note about possible deprecation scared me off :)  But I would prefer that method, so I\u0027ll switch over.","commit_id":"d287237a222dfd15cf27b6b9301eef33bda603a1"}],"nova/compute/task_states.py":[{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"a93ef977d6b9213d6e4b58f6f3c2259d1a189d38","unresolved":false,"context_lines":[{"line_number":108,"context_line":"RESTORING \u003d \u0027restoring\u0027"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"# possible task states during shelve()"},{"line_number":111,"context_line":"SHELVING \u003d \u0027shelving\u0027"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"# possible task states during unshelve()"},{"line_number":114,"context_line":"UNSHELVING \u003d \u0027unshelving\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fve0%3D","line":111,"updated":"2013-06-23 14:23:25.000000000","message":"As part of shelving creates an image, do we need specific SHELVING_IMAGE_* task states ?","commit_id":"29e5744b9112247ebf8c27f1c18326555f1b1d23"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ca866b06dad72f26e0e74099b82aa4d949df2f70","unresolved":false,"context_lines":[{"line_number":108,"context_line":"RESTORING \u003d \u0027restoring\u0027"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"# possible task states during shelve()"},{"line_number":111,"context_line":"SHELVING \u003d \u0027shelving\u0027"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"# possible task states during unshelve()"},{"line_number":114,"context_line":"UNSHELVING \u003d \u0027unshelving\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FtdI%3D","line":111,"in_reply_to":"AAAAPn%2F%2Fve0%3D","updated":"2013-06-24 20:15:45.000000000","message":"That would be good.  I was just re-using the current image task states but it would probably be less confusing to have shelving specific ones.","commit_id":"29e5744b9112247ebf8c27f1c18326555f1b1d23"}],"nova/compute/vm_states.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"93e5310002d555413fe21889b761670fe3ba483c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"ERROR \u003d \u0027error\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"SHELVED \u003d \u0027shelved\u0027  # VM is powered off, resources still on hypervisor"},{"line_number":49,"context_line":"SHELVED_OFFLOAD \u003d \u0027shelved_offload\u0027  # VM and associated resources are"},{"line_number":50,"context_line":"# not on hypervisor"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FT0o%3D","line":49,"updated":"2013-07-04 10:50:38.000000000","message":"Should that be shelved_offloaded?","commit_id":"977f0b949015eff3dc6ad4e1a8af29e76b60bc55"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"bb14d1b90e5a4fc964590658844fabccc68c6b64","unresolved":false,"context_lines":[{"line_number":46,"context_line":"ERROR \u003d \u0027error\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"SHELVED \u003d \u0027shelved\u0027  # VM is powered off, resources still on hypervisor"},{"line_number":49,"context_line":"SHELVED_OFFLOAD \u003d \u0027shelved_offload\u0027  # VM and associated resources are"},{"line_number":50,"context_line":"# not on hypervisor"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAP3%2F%2F9hg%3D","line":49,"in_reply_to":"AAAAPn%2F%2FT0o%3D","updated":"2013-07-08 15:00:26.000000000","message":"Yes, corrected.","commit_id":"977f0b949015eff3dc6ad4e1a8af29e76b60bc55"}],"nova/conductor/api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"36558a3d98f346c39532945ea04650818eadccd7","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    def __init__(self):"},{"line_number":348,"context_line":"        # TODO(danms): This needs to be something more generic for"},{"line_number":349,"context_line":"        # other/future users of this sort of functionality."},{"line_number":350,"context_line":"        self._manager \u003d utils.ExceptionHelper(manager.ComputeTaskManager())"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":353,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FmxA%3D","line":350,"updated":"2013-07-15 22:30:38.000000000","message":"Boo! Unrelated whitespace damage :(","commit_id":"b0688c019da0ef5cd90b02e19aa2f4aa32dc88df"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"6274166bc901a1aea4665e3473bfe17dd7e5c648","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    def __init__(self):"},{"line_number":348,"context_line":"        # TODO(danms): This needs to be something more generic for"},{"line_number":349,"context_line":"        # other/future users of this sort of functionality."},{"line_number":350,"context_line":"        self._manager \u003d utils.ExceptionHelper(manager.ComputeTaskManager())"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    def migrate_server(self, context, instance, scheduler_hint, live, rebuild,"},{"line_number":353,"context_line":"                  flavor, block_migration, disk_over_commit):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FmYo%3D","line":350,"in_reply_to":"AAAAP3%2F%2FmxA%3D","updated":"2013-07-16 00:47:41.000000000","message":"Removing.  Not sure where this came from.","commit_id":"b0688c019da0ef5cd90b02e19aa2f4aa32dc88df"}],"nova/conductor/manager.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"93e5310002d555413fe21889b761670fe3ba483c","unresolved":false,"context_lines":[{"line_number":616,"context_line":"                    task_state\u003dtask_states.POWERING_ON,"},{"line_number":617,"context_line":"                    expected_task_state\u003dtask_states.UNSHELVING)"},{"line_number":618,"context_line":"            self.compute_rpcapi.start_instance(context, instance)"},{"line_number":619,"context_line":"        else:"},{"line_number":620,"context_line":"            image \u003d self._get_image(context, sys_meta[\u0027shelved_image_id\u0027])"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec(context, image,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FT0I%3D","line":619,"updated":"2013-07-04 10:50:38.000000000","message":"is this a bit relaxed, maybe check for the correct state and throw an error if it is something different?","commit_id":"977f0b949015eff3dc6ad4e1a8af29e76b60bc55"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"bb14d1b90e5a4fc964590658844fabccc68c6b64","unresolved":false,"context_lines":[{"line_number":616,"context_line":"                    task_state\u003dtask_states.POWERING_ON,"},{"line_number":617,"context_line":"                    expected_task_state\u003dtask_states.UNSHELVING)"},{"line_number":618,"context_line":"            self.compute_rpcapi.start_instance(context, instance)"},{"line_number":619,"context_line":"        else:"},{"line_number":620,"context_line":"            image \u003d self._get_image(context, sys_meta[\u0027shelved_image_id\u0027])"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec(context, image,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAP3%2F%2F9hM%3D","line":619,"in_reply_to":"AAAAPn%2F%2FT0I%3D","updated":"2013-07-08 15:00:26.000000000","message":"Good point.  Will fix.","commit_id":"977f0b949015eff3dc6ad4e1a8af29e76b60bc55"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"93e5310002d555413fe21889b761670fe3ba483c","unresolved":false,"context_lines":[{"line_number":617,"context_line":"                    expected_task_state\u003dtask_states.UNSHELVING)"},{"line_number":618,"context_line":"            self.compute_rpcapi.start_instance(context, instance)"},{"line_number":619,"context_line":"        else:"},{"line_number":620,"context_line":"            image \u003d self._get_image(context, sys_meta[\u0027shelved_image_id\u0027])"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec(context, image,"},{"line_number":623,"context_line":"                    [instance])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FT0Y%3D","line":620,"updated":"2013-07-04 10:50:38.000000000","message":"If the image is deleted, do we need better error recovery here?\n\nI guess ideally the instance should go into the error state, but maybe it would just stick in unshelving here?","commit_id":"977f0b949015eff3dc6ad4e1a8af29e76b60bc55"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"bb14d1b90e5a4fc964590658844fabccc68c6b64","unresolved":false,"context_lines":[{"line_number":617,"context_line":"                    expected_task_state\u003dtask_states.UNSHELVING)"},{"line_number":618,"context_line":"            self.compute_rpcapi.start_instance(context, instance)"},{"line_number":619,"context_line":"        else:"},{"line_number":620,"context_line":"            image \u003d self._get_image(context, sys_meta[\u0027shelved_image_id\u0027])"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec(context, image,"},{"line_number":623,"context_line":"                    [instance])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAP3%2F%2F9g0%3D","line":620,"in_reply_to":"AAAAPn%2F%2FT0Y%3D","updated":"2013-07-08 15:00:26.000000000","message":"Hmm.  If the image is deleted we can\u0027t ever unshelve.  Logging and going to ERROR is about the only option.  Will fix.","commit_id":"977f0b949015eff3dc6ad4e1a8af29e76b60bc55"},{"author":{"_account_id":7094,"name":"Aarti Kriplani","email":"aartimk@thoughtworks.com","username":"aarti.kriplani"},"change_message_id":"93dc7b90af017a9dc2b57f8c066c374b1429f1cc","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                requested_networks\u003drequested_networks, is_first_time\u003dTrue,"},{"line_number":602,"context_line":"                filter_properties\u003dfilter_properties)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def _instance_update(self, context, instance_uuid, **kwargs):"},{"line_number":605,"context_line":"        (old_ref, instance_ref) \u003d self.db.instance_update_and_get_original("},{"line_number":606,"context_line":"                context, instance_uuid, kwargs)"},{"line_number":607,"context_line":"        notifications.send_update(context, old_ref, instance_ref, \u0027conductor\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2FpcM%3D","line":604,"updated":"2013-07-15 12:13:43.000000000","message":"We could use the existing scheduler_utils#set_vm_state_and_notify for this?","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5bf9d7b254997f5980b6250786e6205f46d639cb","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                requested_networks\u003drequested_networks, is_first_time\u003dTrue,"},{"line_number":602,"context_line":"                filter_properties\u003dfilter_properties)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def _instance_update(self, context, instance_uuid, **kwargs):"},{"line_number":605,"context_line":"        (old_ref, instance_ref) \u003d self.db.instance_update_and_get_original("},{"line_number":606,"context_line":"                context, instance_uuid, kwargs)"},{"line_number":607,"context_line":"        notifications.send_update(context, old_ref, instance_ref, \u0027conductor\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2Fn%2F4%3D","line":604,"in_reply_to":"AAAAP3%2F%2Fo3U%3D","updated":"2013-07-15 17:54:10.000000000","message":"+1","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1c1cd761308e16b9f65d6224631a96fde317972e","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                requested_networks\u003drequested_networks, is_first_time\u003dTrue,"},{"line_number":602,"context_line":"                filter_properties\u003dfilter_properties)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def _instance_update(self, context, instance_uuid, **kwargs):"},{"line_number":605,"context_line":"        (old_ref, instance_ref) \u003d self.db.instance_update_and_get_original("},{"line_number":606,"context_line":"                context, instance_uuid, kwargs)"},{"line_number":607,"context_line":"        notifications.send_update(context, old_ref, instance_ref, \u0027conductor\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2Fo3U%3D","line":604,"in_reply_to":"AAAAP3%2F%2FpcM%3D","updated":"2013-07-15 14:51:48.000000000","message":"That method is only there temporarily, and shouldn\u0027t actually be there.  So it needs to either be here, or put into compute/utils.","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"387fd8b033145ba22f126f1e97cdfb263674724c","unresolved":false,"context_lines":[{"line_number":631,"context_line":"            self._instance_update(context, instance[\u0027uuid\u0027],"},{"line_number":632,"context_line":"                    task_state\u003dtask_states.POWERING_ON,"},{"line_number":633,"context_line":"                    expected_task_state\u003dtask_states.UNSHELVING)"},{"line_number":634,"context_line":"            self.compute_rpcapi.start_instance(context, instance)"},{"line_number":635,"context_line":"        elif instance[\u0027vm_state\u0027] \u003d\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":636,"context_line":"            try:"},{"line_number":637,"context_line":"                with compute_utils.EventReporter(context, self.db,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2FpKM%3D","line":634,"updated":"2013-07-15 14:22:14.000000000","message":"Do we need to delete the image in this case? I guess the image gets created on the shelve request.\n\nI think that happens in:\nself.compute_rpcapi.unshelve_instance","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1c1cd761308e16b9f65d6224631a96fde317972e","unresolved":false,"context_lines":[{"line_number":631,"context_line":"            self._instance_update(context, instance[\u0027uuid\u0027],"},{"line_number":632,"context_line":"                    task_state\u003dtask_states.POWERING_ON,"},{"line_number":633,"context_line":"                    expected_task_state\u003dtask_states.UNSHELVING)"},{"line_number":634,"context_line":"            self.compute_rpcapi.start_instance(context, instance)"},{"line_number":635,"context_line":"        elif instance[\u0027vm_state\u0027] \u003d\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":636,"context_line":"            try:"},{"line_number":637,"context_line":"                with compute_utils.EventReporter(context, self.db,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2Fo2o%3D","line":634,"in_reply_to":"AAAAP3%2F%2FpKM%3D","updated":"2013-07-15 14:51:48.000000000","message":"Good catch.  Yes, it would need to be deleted.","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"387fd8b033145ba22f126f1e97cdfb263674724c","unresolved":false,"context_lines":[{"line_number":647,"context_line":""},{"line_number":648,"context_line":"            hosts \u003d self._schedule_instances(context, image, [], instance)"},{"line_number":649,"context_line":"            host \u003d hosts.pop(0).host"},{"line_number":650,"context_line":"            self.compute_rpcapi.unshelve_instance(context, instance, host,"},{"line_number":651,"context_line":"                    image)"},{"line_number":652,"context_line":"        else:"},{"line_number":653,"context_line":"            LOG.error(_(\u0027Unshelve attempted but vm_state not SHELVED or \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2FpJw%3D","line":650,"updated":"2013-07-15 14:22:14.000000000","message":"So, the scheduling might not be prefect, I guess we need a retry loop here? Probably best in a follow up change though.","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5bf9d7b254997f5980b6250786e6205f46d639cb","unresolved":false,"context_lines":[{"line_number":647,"context_line":""},{"line_number":648,"context_line":"            hosts \u003d self._schedule_instances(context, image, [], instance)"},{"line_number":649,"context_line":"            host \u003d hosts.pop(0).host"},{"line_number":650,"context_line":"            self.compute_rpcapi.unshelve_instance(context, instance, host,"},{"line_number":651,"context_line":"                    image)"},{"line_number":652,"context_line":"        else:"},{"line_number":653,"context_line":"            LOG.error(_(\u0027Unshelve attempted but vm_state not SHELVED or \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2FoAY%3D","line":650,"in_reply_to":"AAAAP3%2F%2Fo08%3D","updated":"2013-07-15 17:54:10.000000000","message":"+1","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1c1cd761308e16b9f65d6224631a96fde317972e","unresolved":false,"context_lines":[{"line_number":647,"context_line":""},{"line_number":648,"context_line":"            hosts \u003d self._schedule_instances(context, image, [], instance)"},{"line_number":649,"context_line":"            host \u003d hosts.pop(0).host"},{"line_number":650,"context_line":"            self.compute_rpcapi.unshelve_instance(context, instance, host,"},{"line_number":651,"context_line":"                    image)"},{"line_number":652,"context_line":"        else:"},{"line_number":653,"context_line":"            LOG.error(_(\u0027Unshelve attempted but vm_state not SHELVED or \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2Fo08%3D","line":650,"in_reply_to":"AAAAP3%2F%2FpJw%3D","updated":"2013-07-15 14:51:48.000000000","message":"I would agree.  It would be nice if I could take advantage of build_instances for this, though that will take a while to get sorted out.  But I would rather defer the retry complexity for later.","commit_id":"2e2aa0f9f1d41f06a8445e4ac89dd4db55288e3f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"36558a3d98f346c39532945ea04650818eadccd7","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        if instance[\u0027vm_state\u0027] \u003d\u003d vm_states.SHELVED:"},{"line_number":636,"context_line":"            self._instance_update(context, instance[\u0027uuid\u0027],"},{"line_number":637,"context_line":"                    task_state\u003dtask_states.POWERING_ON,"},{"line_number":638,"context_line":"                    expected_task_state\u003dtask_states.UNSHELVING)"},{"line_number":639,"context_line":"            self.compute_rpcapi.start_instance(context, instance)"},{"line_number":640,"context_line":"            snapshot_id \u003d sys_meta.get(\u0027shelved_image_id\u0027)"},{"line_number":641,"context_line":"            if snapshot_id:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2Fmww%3D","line":638,"updated":"2013-07-15 22:30:38.000000000","message":"Hmm, isn\u0027t instance an object in this method? Could use instance.save(), no?","commit_id":"b0688c019da0ef5cd90b02e19aa2f4aa32dc88df"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"6274166bc901a1aea4665e3473bfe17dd7e5c648","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        if instance[\u0027vm_state\u0027] \u003d\u003d vm_states.SHELVED:"},{"line_number":636,"context_line":"            self._instance_update(context, instance[\u0027uuid\u0027],"},{"line_number":637,"context_line":"                    task_state\u003dtask_states.POWERING_ON,"},{"line_number":638,"context_line":"                    expected_task_state\u003dtask_states.UNSHELVING)"},{"line_number":639,"context_line":"            self.compute_rpcapi.start_instance(context, instance)"},{"line_number":640,"context_line":"            snapshot_id \u003d sys_meta.get(\u0027shelved_image_id\u0027)"},{"line_number":641,"context_line":"            if snapshot_id:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FmYw%3D","line":638,"in_reply_to":"AAAAP3%2F%2Fmww%3D","updated":"2013-07-16 00:47:41.000000000","message":"Yep.  Converting tests to objects to make this work.","commit_id":"b0688c019da0ef5cd90b02e19aa2f4aa32dc88df"},{"author":{"_account_id":1678,"name":"Tiantian Gao","email":"gtt116@gmail.com","username":"gtt116"},"change_message_id":"b75677d8c87c4cb3e99d2094583381c82d76a17a","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                    instance.vm_state \u003d vm_states.ERROR"},{"line_number":652,"context_line":"                    instance.save()"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            hosts \u003d self._schedule_instances(context, image, [], instance)"},{"line_number":655,"context_line":"            host \u003d hosts.pop(0)[\u0027host\u0027]"},{"line_number":656,"context_line":"            self.compute_rpcapi.unshelve_instance(context, instance, host,"},{"line_number":657,"context_line":"                    image)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2F%2FHw%3D","line":654,"updated":"2013-10-24 08:32:27.000000000","message":"A minor issue :)\n\nIf scheduler can\u0027t find a valid host, it will raise a exception here. Then the instance will stuck in task_state: unshelving forever. What was worse user don\u0027t know what happened.","commit_id":"c346befc630fd12623d9dc72f9f0c608aaaf2303"},{"author":{"_account_id":9282,"name":"hougangliu","email":"liuhoug@cn.ibm.com","username":"HougangLiu"},"change_message_id":"a58c2ed5d74dc512aaee2242d8c43791f85cbf7a","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                    instance.vm_state \u003d vm_states.ERROR"},{"line_number":652,"context_line":"                    instance.save()"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            hosts \u003d self._schedule_instances(context, image, [], instance)"},{"line_number":655,"context_line":"            host \u003d hosts.pop(0)[\u0027host\u0027]"},{"line_number":656,"context_line":"            self.compute_rpcapi.unshelve_instance(context, instance, host,"},{"line_number":657,"context_line":"                    image)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2Fb5I%3D","line":654,"in_reply_to":"AAAATn%2F%2F%2FHw%3D","updated":"2013-11-06 08:15:34.000000000","message":"I encounter the same case in my program.Please fix it.","commit_id":"c346befc630fd12623d9dc72f9f0c608aaaf2303"},{"author":{"_account_id":9282,"name":"hougangliu","email":"liuhoug@cn.ibm.com","username":"HougangLiu"},"change_message_id":"249174560f44ae82efbe20bbad74609dc50d8d70","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                    instance.vm_state \u003d vm_states.ERROR"},{"line_number":652,"context_line":"                    instance.save()"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            hosts \u003d self._schedule_instances(context, image, [], instance)"},{"line_number":655,"context_line":"            host \u003d hosts.pop(0)[\u0027host\u0027]"},{"line_number":656,"context_line":"            self.compute_rpcapi.unshelve_instance(context, instance, host,"},{"line_number":657,"context_line":"                    image)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2FZ%2Fw%3D","line":654,"in_reply_to":"AAAATn%2F%2Faw8%3D","updated":"2013-11-07 03:16:27.000000000","message":"I had reported this","commit_id":"c346befc630fd12623d9dc72f9f0c608aaaf2303"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a5c24713b3f83fdc2d902c1f6ac526eca450f3b2","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                    instance.vm_state \u003d vm_states.ERROR"},{"line_number":652,"context_line":"                    instance.save()"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            hosts \u003d self._schedule_instances(context, image, [], instance)"},{"line_number":655,"context_line":"            host \u003d hosts.pop(0)[\u0027host\u0027]"},{"line_number":656,"context_line":"            self.compute_rpcapi.unshelve_instance(context, instance, host,"},{"line_number":657,"context_line":"                    image)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2Faw8%3D","line":654,"in_reply_to":"AAAATn%2F%2Fb5I%3D","updated":"2013-11-06 17:42:01.000000000","message":"Have either of you reported this as a bug?  That would seem to be the obvious next step…","commit_id":"c346befc630fd12623d9dc72f9f0c608aaaf2303"}],"nova/tests/compute/test_shelve.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"93e5310002d555413fe21889b761670fe3ba483c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.mox.VerifyAll()"},{"line_number":69,"context_line":"        self.mox.UnsetStubs()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        self.compute.terminate_instance(self.context, instance\u003dinstance)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_shelve_volume_backed(self):"},{"line_number":74,"context_line":"        instance \u003d jsonutils.to_primitive(self._create_fake_instance())"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FTz0%3D","line":71,"updated":"2013-07-04 10:50:38.000000000","message":"Maybe this should be tracked and destroyed in a tearDown, but this seems a nice simple approach, so I am good with it really.","commit_id":"977f0b949015eff3dc6ad4e1a8af29e76b60bc55"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4e630dbd1878c6f2c2363e10734f3894b0573d5b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                mox.IgnoreArg())"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        db.instance_update_and_get_original(self.context, instance[\u0027uuid\u0027],"},{"line_number":55,"context_line":"                {\u0027power_state\u0027: \u0027fake_power\u0027,"},{"line_number":56,"context_line":"                 \u0027vm_state\u0027: vm_states.SHELVED,"},{"line_number":57,"context_line":"                 \u0027task_state\u0027: None,"},{"line_number":58,"context_line":"                 \u0027expected_task_state\u0027: [task_states.SHELVING,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2FnrE%3D","line":55,"updated":"2013-07-15 19:10:45.000000000","message":"power_state is an integer :)","commit_id":"c5ad5b7f729c0656bc21c0adece5ccdf040b771d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4e630dbd1878c6f2c2363e10734f3894b0573d5b","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.compute._prep_block_device(self.context, instance,"},{"line_number":148,"context_line":"                []).AndReturn(\u0027fake_bdm\u0027)"},{"line_number":149,"context_line":"        instance[\u0027key_data\u0027] \u003d None"},{"line_number":150,"context_line":"        instance[\u0027auto_disk_config\u0027] \u003d None"},{"line_number":151,"context_line":"        self.compute.driver.spawn(self.context, instance, image,"},{"line_number":152,"context_line":"                injected_files\u003d[], admin_password\u003dNone,"},{"line_number":153,"context_line":"                network_info\u003d[],"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Fnqc%3D","line":150,"updated":"2013-07-15 19:10:45.000000000","message":"auto_disk_config is a boolean :)","commit_id":"c5ad5b7f729c0656bc21c0adece5ccdf040b771d"}],"nova/tests/fake_policy.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"93e5310002d555413fe21889b761670fe3ba483c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    \"compute:snapshot\": \"\","},{"line_number":85,"context_line":"    \"compute:backup\": \"\","},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    \"compute:shelve\": \"\","},{"line_number":88,"context_line":"    \"compute:unshelve\": \"\","},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    \"compute:security_groups:add_to_instance\": \"\","}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPn%2F%2FTzs%3D","line":87,"updated":"2013-07-04 10:50:38.000000000","message":"Is this in the wrong change set?","commit_id":"977f0b949015eff3dc6ad4e1a8af29e76b60bc55"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"bb14d1b90e5a4fc964590658844fabccc68c6b64","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    \"compute:snapshot\": \"\","},{"line_number":85,"context_line":"    \"compute:backup\": \"\","},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    \"compute:shelve\": \"\","},{"line_number":88,"context_line":"    \"compute:unshelve\": \"\","},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    \"compute:security_groups:add_to_instance\": \"\","}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAP3%2F%2F9fY%3D","line":87,"in_reply_to":"AAAAPn%2F%2FTzs%3D","updated":"2013-07-08 15:00:26.000000000","message":"This is for the policy in compute/api.py.  It\u0027s different from the policy at the wsgi api layer.  It feels like duplication but it\u0027s controlling slightly different things.  A lot of the actions (pause/unpause/start/stop/etc...) do the same thing.","commit_id":"977f0b949015eff3dc6ad4e1a8af29e76b60bc55"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"44edc13d151de800e5189de7fc8e56c48b2f5e8c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    \"compute:snapshot\": \"\","},{"line_number":85,"context_line":"    \"compute:backup\": \"\","},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    \"compute:shelve\": \"\","},{"line_number":88,"context_line":"    \"compute:unshelve\": \"\","},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    \"compute:security_groups:add_to_instance\": \"\","}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FuZs%3D","line":87,"updated":"2013-07-12 11:42:15.000000000","message":"is there a real policy file that needs updating too? Sorry for my ignorance.","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5bea80c8bbf8d2ca9c71adc42c742827cf13cbfc","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    \"compute:snapshot\": \"\","},{"line_number":85,"context_line":"    \"compute:backup\": \"\","},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    \"compute:shelve\": \"\","},{"line_number":88,"context_line":"    \"compute:unshelve\": \"\","},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    \"compute:security_groups:add_to_instance\": \"\","}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FuHs%3D","line":87,"in_reply_to":"AAAAP3%2F%2FuZs%3D","updated":"2013-07-12 13:36:42.000000000","message":"I wasn\u0027t sure how to handle this one.  From what I can tell, the etc/nova/policy.json file has explicit policies for API calls defined, but tends to leave out the compute/api.py policies.  But it would be good practice to update both at the same time, so I\u0027ll update it.","commit_id":"3a640dc863eb7e211702ae60ac107ee148dbc906"}]}
