)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0298c23aef2940ff6c21021f12fc6ecfe097a1e9","unresolved":false,"context_lines":[{"line_number":1247,"context_line":"        # May have been allocated previously and rescheduled to this host"},{"line_number":1248,"context_line":"        #network_info \u003d self._get_instance_nw_info(context, instance)"},{"line_number":1249,"context_line":"        #if network_info is not None:"},{"line_number":1250,"context_line":"        #    return network_info"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"        if not self.is_neutron_security_groups:"},{"line_number":1253,"context_line":"            security_groups \u003d []"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2BlW0%3D","line":1250,"updated":"2013-11-22 19:59:26.000000000","message":"Let\u0027s eliminate code instead of just commenting it out; it will continue to exist in the version history, after all…","commit_id":"fe14f3e29ef3eeb4c0d5eddd7c152a5121d6b164"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"00ce27226a2063d3323e31844b9552a3624d8913","unresolved":false,"context_lines":[{"line_number":1247,"context_line":"        # May have been allocated previously and rescheduled to this host"},{"line_number":1248,"context_line":"        #network_info \u003d self._get_instance_nw_info(context, instance)"},{"line_number":1249,"context_line":"        #if network_info is not None:"},{"line_number":1250,"context_line":"        #    return network_info"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"        if not self.is_neutron_security_groups:"},{"line_number":1253,"context_line":"            security_groups \u003d []"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2BeIk%3D","line":1250,"in_reply_to":"AAAATn%2F%2BlW0%3D","updated":"2013-11-25 18:28:28.000000000","message":"Agreed.  This was split out into https://review.openstack.org/#/c/57961/ and I just haven\u0027t cleaned up this patchset yet.","commit_id":"fe14f3e29ef3eeb4c0d5eddd7c152a5121d6b164"},{"author":{"_account_id":2468,"name":"unicell","email":"unicell@gmail.com","username":"unicell"},"change_message_id":"d752e6364f6cc624664ebfb9ed4c95ba2d1a41da","unresolved":false,"context_lines":[{"line_number":1617,"context_line":"                msg \u003d _(\u0027Instance disappeared during build.\u0027)"},{"line_number":1618,"context_line":"                LOG.debug(msg, instance\u003dinstance)"},{"line_number":1619,"context_line":"            except exception.UnexpectedTaskStateError as e:"},{"line_number":1620,"context_line":"                # The instance is deleting, so clean up but don\u0027t error."},{"line_number":1621,"context_line":"                LOG.debug(e.format_message(), instance\u003dinstance)"},{"line_number":1622,"context_line":"                self._cleanup_allocated_networks(context, instance,"},{"line_number":1623,"context_line":"                        requested_networks)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2BkSs%3D","line":1620,"updated":"2013-11-23 03:01:35.000000000","message":"I assume this portion going to be splitted out as a separate patch? Which you\u0027ve already submitted for review.\nhttps://review.openstack.org/#/c/57497/","commit_id":"fe14f3e29ef3eeb4c0d5eddd7c152a5121d6b164"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"00ce27226a2063d3323e31844b9552a3624d8913","unresolved":false,"context_lines":[{"line_number":1617,"context_line":"                msg \u003d _(\u0027Instance disappeared during build.\u0027)"},{"line_number":1618,"context_line":"                LOG.debug(msg, instance\u003dinstance)"},{"line_number":1619,"context_line":"            except exception.UnexpectedTaskStateError as e:"},{"line_number":1620,"context_line":"                # The instance is deleting, so clean up but don\u0027t error."},{"line_number":1621,"context_line":"                LOG.debug(e.format_message(), instance\u003dinstance)"},{"line_number":1622,"context_line":"                self._cleanup_allocated_networks(context, instance,"},{"line_number":1623,"context_line":"                        requested_networks)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2BeIY%3D","line":1620,"in_reply_to":"AAAATn%2F%2BkSs%3D","updated":"2013-11-25 18:28:28.000000000","message":"Yes, I need to rebase this and update it.","commit_id":"fe14f3e29ef3eeb4c0d5eddd7c152a5121d6b164"},{"author":{"_account_id":2468,"name":"unicell","email":"unicell@gmail.com","username":"unicell"},"change_message_id":"d752e6364f6cc624664ebfb9ed4c95ba2d1a41da","unresolved":false,"context_lines":[{"line_number":1725,"context_line":"                # Reraise since this exception won\u0027t set an error state."},{"line_number":1726,"context_line":"                raise"},{"line_number":1727,"context_line":"            raise exception.BuildAbortException(instance_uuid\u003dinstance[\u0027uuid\u0027],"},{"line_number":1728,"context_line":"                    reason\u003de.formate_message())"},{"line_number":1729,"context_line":"        except Exception:"},{"line_number":1730,"context_line":"            # Because this allocation is async any failures are likely to occur"},{"line_number":1731,"context_line":"            # when the driver accesses network_info during spawn()."}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2BkSg%3D","line":1728,"updated":"2013-11-23 03:01:35.000000000","message":"Same above, and my concern has been raised in \nhttps://review.openstack.org/#/c/57497/","commit_id":"fe14f3e29ef3eeb4c0d5eddd7c152a5121d6b164"},{"author":{"_account_id":2468,"name":"unicell","email":"unicell@gmail.com","username":"unicell"},"change_message_id":"d752e6364f6cc624664ebfb9ed4c95ba2d1a41da","unresolved":false,"context_lines":[{"line_number":1748,"context_line":"                # Reraise since this exception won\u0027t set an error state."},{"line_number":1749,"context_line":"                raise"},{"line_number":1750,"context_line":"            raise exception.BuildAbortException(instance_uuid\u003dinstance[\u0027uuid\u0027],"},{"line_number":1751,"context_line":"                    reason\u003de.formate_message())"},{"line_number":1752,"context_line":"        except Exception:"},{"line_number":1753,"context_line":"            LOG.exception(_(\u0027Failure prepping block device\u0027),"},{"line_number":1754,"context_line":"                    instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2BkSc%3D","line":1751,"updated":"2013-11-23 03:01:35.000000000","message":"Same above","commit_id":"fe14f3e29ef3eeb4c0d5eddd7c152a5121d6b164"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e93615ecf15be4e51fd19e18da2089456ac12102","unresolved":false,"context_lines":[{"line_number":1626,"context_line":"                if self.driver.dhcp_options_for_instance(instance):"},{"line_number":1627,"context_line":"                    self._cleanup_allocated_networks(context, instance,"},{"line_number":1628,"context_line":"                            requested_networks)"},{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"                instance.task_state \u003d task_states.SCHEDULING"},{"line_number":1631,"context_line":"                instance.save()"},{"line_number":1632,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F3xo%3D","line":1629,"updated":"2014-01-07 12:08:36.000000000","message":"I think we need to ensure instance faults and notifications get raised on re-schedules. It seems we are missing that in this route.","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b5a350082722a6f89c3b20110dd96779c4a0569c","unresolved":false,"context_lines":[{"line_number":1626,"context_line":"                if self.driver.dhcp_options_for_instance(instance):"},{"line_number":1627,"context_line":"                    self._cleanup_allocated_networks(context, instance,"},{"line_number":1628,"context_line":"                            requested_networks)"},{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"                instance.task_state \u003d task_states.SCHEDULING"},{"line_number":1631,"context_line":"                instance.save()"},{"line_number":1632,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F17g%3D","line":1629,"in_reply_to":"AAAAUH%2F%2F3Og%3D","updated":"2014-01-08 14:35:12.000000000","message":"As far as I see everything is covered.  If you see something missing I\u0027d like to address it.","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2006f2da9333ffac0bbb4e4df115aa1ab09cd8c4","unresolved":false,"context_lines":[{"line_number":1626,"context_line":"                if self.driver.dhcp_options_for_instance(instance):"},{"line_number":1627,"context_line":"                    self._cleanup_allocated_networks(context, instance,"},{"line_number":1628,"context_line":"                            requested_networks)"},{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"                instance.task_state \u003d task_states.SCHEDULING"},{"line_number":1631,"context_line":"                instance.save()"},{"line_number":1632,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F3Og%3D","line":1629,"in_reply_to":"AAAAUH%2F%2F3xo%3D","updated":"2014-01-07 15:12:04.000000000","message":"I\u0027m pretty sure notifications are covered, though I\u0027ll double check since this code has been in place for a while.  Do you know what instance faults might be missing?","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e93615ecf15be4e51fd19e18da2089456ac12102","unresolved":false,"context_lines":[{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"                instance.task_state \u003d task_states.SCHEDULING"},{"line_number":1631,"context_line":"                instance.save()"},{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"                self.compute_task_api.build_instances(context, [instance],"},{"line_number":1634,"context_line":"                        image, filter_properties, admin_password,"},{"line_number":1635,"context_line":"                        injected_files, requested_networks, security_groups,"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F3w8%3D","line":1632,"updated":"2014-01-07 12:08:36.000000000","message":"It seems wrong to update the filter_properties with the exc_info in the old route, but not update the filter_properties here. That should help with our classification retry idea.","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2006f2da9333ffac0bbb4e4df115aa1ab09cd8c4","unresolved":false,"context_lines":[{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"                instance.task_state \u003d task_states.SCHEDULING"},{"line_number":1631,"context_line":"                instance.save()"},{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"                self.compute_task_api.build_instances(context, [instance],"},{"line_number":1634,"context_line":"                        image, filter_properties, admin_password,"},{"line_number":1635,"context_line":"                        injected_files, requested_networks, security_groups,"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F3Os%3D","line":1632,"in_reply_to":"AAAAUH%2F%2F3w8%3D","updated":"2014-01-07 15:12:04.000000000","message":"I\u0027m pretty opposed to stuffing that into filter_properties, since it\u0027s not a property we use for filtering.  But if I\u0027ve missed some functionality by not doing that then that needs to get ported over somehow.","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1b4af52d4251ee26c70ffe12b18ea4c711a7f110","unresolved":false,"context_lines":[{"line_number":568,"context_line":"class ComputeManager(manager.Manager):"},{"line_number":569,"context_line":"    \"\"\"Manages the running instances from creation to destruction.\"\"\""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    target \u003d messaging.Target(version\u003d\u00273.27\u0027)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    def __init__(self, compute_driver\u003dNone, *args, **kwargs):"},{"line_number":574,"context_line":"        \"\"\"Load configuration options and connect to the hypervisor.\"\"\""}],"source_content_type":"text/x-python","patch_set":35,"id":"7adec928_70291c89","line":571,"updated":"2014-05-19 16:31:10.000000000","message":"Hmm, why is this bumped? Because of the different exception behavior below? Not sure we normally do that...\n\nOh, did we never add a version for the actual manager method? If it\u0027s not changing, we could probably choose whatever version came after the implementation was actually added right?","commit_id":"8eeec4e4d731f4a545ce8acae53b95793dedb5ad"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"c831acb348cf3ca90e647e22623b1fb8859d2f95","unresolved":false,"context_lines":[{"line_number":568,"context_line":"class ComputeManager(manager.Manager):"},{"line_number":569,"context_line":"    \"\"\"Manages the running instances from creation to destruction.\"\"\""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    target \u003d messaging.Target(version\u003d\u00273.27\u0027)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    def __init__(self, compute_driver\u003dNone, *args, **kwargs):"},{"line_number":574,"context_line":"        \"\"\"Load configuration options and connect to the hypervisor.\"\"\""}],"source_content_type":"text/x-python","patch_set":35,"id":"7adec928_fec6dd98","line":571,"in_reply_to":"7adec928_70291c89","updated":"2014-05-19 17:28:08.000000000","message":"Ya, looks to be because the manager method was never used.. and this patch adds the rpcapi method for it.","commit_id":"8eeec4e4d731f4a545ce8acae53b95793dedb5ad"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"25543baccfa405702b24fbb7c58ad014b37c497a","unresolved":false,"context_lines":[{"line_number":568,"context_line":"class ComputeManager(manager.Manager):"},{"line_number":569,"context_line":"    \"\"\"Manages the running instances from creation to destruction.\"\"\""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    target \u003d messaging.Target(version\u003d\u00273.27\u0027)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    def __init__(self, compute_driver\u003dNone, *args, **kwargs):"},{"line_number":574,"context_line":"        \"\"\"Load configuration options and connect to the hypervisor.\"\"\""}],"source_content_type":"text/x-python","patch_set":35,"id":"7adec928_9e1879d4","line":571,"in_reply_to":"7adec928_fec6dd98","updated":"2014-05-19 17:48:00.000000000","message":"Yep, what Chris said.\n\nIt appears that compute was at version 2.27 when build_and_run_instance was added.  So yeah, this doesn\u0027t really need a bump unless I make a change here.","commit_id":"8eeec4e4d731f4a545ce8acae53b95793dedb5ad"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"30338ecbd0373233d40634a75025450900df58b3","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        2.47 - Made finish_revert_resize() take new-world objects"},{"line_number":205,"context_line":"        2.48 - Make add_aggregate_host() and remove_aggregate_host() take"},{"line_number":206,"context_line":"               new-world objects"},{"line_number":207,"context_line":"        2.49 - Adds build_and_run_instance()"},{"line_number":208,"context_line":"    \u0027\u0027\u0027"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    #"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATH%2F%2FH5c%3D","line":207,"updated":"2013-10-22 20:38:50.000000000","message":"Looks like a rebase may be in order; I see a comment inserted between 2.47 and 2.48.","commit_id":"e54ead1b5691f98f0f483e4bbfc00d9adaff4fdc"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f5e20b69df1137f462b2329ed9e0d52c3c50503e","unresolved":false,"context_lines":[{"line_number":881,"context_line":"                security_groups\u003dsecurity_groups,"},{"line_number":882,"context_line":"                block_device_mapping\u003dbdms_p, node\u003dnode,"},{"line_number":883,"context_line":"                limits\u003dlimits),"},{"line_number":884,"context_line":"            topic\u003d_compute_topic(self.topic, ctxt, host, None),"},{"line_number":885,"context_line":"            version\u003d\u00272.45\u0027)"},{"line_number":886,"context_line":""},{"line_number":887,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Fp5Y%3D","line":884,"updated":"2013-10-30 19:44:42.000000000","message":"_compute_topic is not defined, which I think is the crux of all the fails in this patch (noticed a lot of fails in the check queue on this one).","commit_id":"94f5a035aa83f5ef1b722692e9401a5878d4809a"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"20649dcb635478ff84b6982bb2bd86f413271dd9","unresolved":false,"context_lines":[{"line_number":867,"context_line":"                   volume_id\u003dvolume_id, snapshot_id\u003dsnapshot_id,"},{"line_number":868,"context_line":"                   delete_info\u003ddelete_info)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"    def build_and_run_instance(self, ctxt, instance, host, image, request_spec,"},{"line_number":871,"context_line":"            filter_properties, admin_password\u003dNone, injected_files\u003dNone,"},{"line_number":872,"context_line":"            requested_networks\u003dNone, security_groups\u003dNone,"},{"line_number":873,"context_line":"            block_device_mapping\u003dNone, node\u003dNone, limits\u003dNone):"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F6hs%3D","line":870,"updated":"2014-01-06 21:02:45.000000000","message":"I wonder if we should have a request_state param or something like it.  It\u0027d be a place to put info \u0027networks already allocated\u0027 on previous attempt(s).\n\nI think one of your comments on the other review suggested moving that kind of thing to the Instance object once there are objects everywhere, although that kind of metadata is really a property of the build process itself, not the instance.","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2006f2da9333ffac0bbb4e4df115aa1ab09cd8c4","unresolved":false,"context_lines":[{"line_number":867,"context_line":"                   volume_id\u003dvolume_id, snapshot_id\u003dsnapshot_id,"},{"line_number":868,"context_line":"                   delete_info\u003ddelete_info)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"    def build_and_run_instance(self, ctxt, instance, host, image, request_spec,"},{"line_number":871,"context_line":"            filter_properties, admin_password\u003dNone, injected_files\u003dNone,"},{"line_number":872,"context_line":"            requested_networks\u003dNone, security_groups\u003dNone,"},{"line_number":873,"context_line":"            block_device_mapping\u003dNone, node\u003dNone, limits\u003dNone):"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F3IQ%3D","line":870,"in_reply_to":"AAAAUH%2F%2F32A%3D","updated":"2014-01-07 15:12:04.000000000","message":"I think I\u0027d like to try that now, as a better solution for the networks_allocated issue on the depended patch.  Context is how I think of it, but a request_state dict(or whatever name) could be passed around to handle transient state.","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e93615ecf15be4e51fd19e18da2089456ac12102","unresolved":false,"context_lines":[{"line_number":867,"context_line":"                   volume_id\u003dvolume_id, snapshot_id\u003dsnapshot_id,"},{"line_number":868,"context_line":"                   delete_info\u003ddelete_info)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"    def build_and_run_instance(self, ctxt, instance, host, image, request_spec,"},{"line_number":871,"context_line":"            filter_properties, admin_password\u003dNone, injected_files\u003dNone,"},{"line_number":872,"context_line":"            requested_networks\u003dNone, security_groups\u003dNone,"},{"line_number":873,"context_line":"            block_device_mapping\u003dNone, node\u003dNone, limits\u003dNone):"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F32A%3D","line":870,"in_reply_to":"AAAAUH%2F%2F6hs%3D","updated":"2014-01-07 12:08:36.000000000","message":"I wonder about a task context, with some persisted and some transient state? But thats for later I guess.","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"6d9dd172d7847f0d7f6c3957d736a351ff7f16f6","unresolved":false,"context_lines":[{"line_number":997,"context_line":"            filter_properties, admin_password\u003dNone, injected_files\u003dNone,"},{"line_number":998,"context_line":"            requested_networks\u003dNone, security_groups\u003dNone,"},{"line_number":999,"context_line":"            block_device_mapping\u003dNone, node\u003dNone, limits\u003dNone):"},{"line_number":1000,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003d\u00273.0\u0027)"},{"line_number":1001,"context_line":"        cctxt.cast(ctxt, \u0027build_and_run_instance\u0027, instance\u003dinstance,"},{"line_number":1002,"context_line":"                image\u003dimage, request_spec\u003drequest_spec,"},{"line_number":1003,"context_line":"                filter_properties\u003dfilter_properties,"}],"source_content_type":"text/x-python","patch_set":42,"id":"3ae8d1ca_01de7a11","line":1000,"updated":"2014-05-28 09:26:24.000000000","message":"The version 3.0 requirement takes a bit of research\n\nIcehouse compute is at version 3.23 so perhaps that\u0027s all we care about. Unless there was a good reason to pick 3.0, maybe 3.23 would have been sufficient.\n\nInterestingly, when version 3.0 was added in I5d303445ded2342a54d8319b79df172ce50fa716 we didn\u0027t have build_and_run_instance() in 3.0 but we did have it in version 2.48. When version 2.48 was removed in I31c21055163e94b712d337568b16b9b7a224b52f only *then* was build_and_run_instance() added to version 3.0\n\nI83e562845f07a76fa3365d46f1bb4a44dbda6bc1 might have been the last semantically significant change made to the method which we now require and that was merged before the 2.48 API was removed\n\nAll in all, I\u0027m not worried about requiring 3.0 but I think I would have simply required 3.23","commit_id":"6fc2817844d7b58ee5977b0aded4119fea8370fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c22982362365e9b5bf88ddca6cf97fd288539cd3","unresolved":false,"context_lines":[{"line_number":997,"context_line":"            filter_properties, admin_password\u003dNone, injected_files\u003dNone,"},{"line_number":998,"context_line":"            requested_networks\u003dNone, security_groups\u003dNone,"},{"line_number":999,"context_line":"            block_device_mapping\u003dNone, node\u003dNone, limits\u003dNone):"},{"line_number":1000,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003d\u00273.0\u0027)"},{"line_number":1001,"context_line":"        cctxt.cast(ctxt, \u0027build_and_run_instance\u0027, instance\u003dinstance,"},{"line_number":1002,"context_line":"                image\u003dimage, request_spec\u003drequest_spec,"},{"line_number":1003,"context_line":"                filter_properties\u003dfilter_properties,"}],"source_content_type":"text/x-python","patch_set":42,"id":"3ae8d1ca_5e6db431","line":1000,"in_reply_to":"3ae8d1ca_01de7a11","updated":"2014-05-28 13:40:19.000000000","message":"Ah, interesting. There\u0027s really no reason not to require 3.23, AFAIK.","commit_id":"6fc2817844d7b58ee5977b0aded4119fea8370fc"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1162284947f3d105d54f77757acf8c98a22270ec","unresolved":false,"context_lines":[{"line_number":997,"context_line":"            filter_properties, admin_password\u003dNone, injected_files\u003dNone,"},{"line_number":998,"context_line":"            requested_networks\u003dNone, security_groups\u003dNone,"},{"line_number":999,"context_line":"            block_device_mapping\u003dNone, node\u003dNone, limits\u003dNone):"},{"line_number":1000,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003d\u00273.0\u0027)"},{"line_number":1001,"context_line":"        cctxt.cast(ctxt, \u0027build_and_run_instance\u0027, instance\u003dinstance,"},{"line_number":1002,"context_line":"                image\u003dimage, request_spec\u003drequest_spec,"},{"line_number":1003,"context_line":"                filter_properties\u003dfilter_properties,"}],"source_content_type":"text/x-python","patch_set":42,"id":"3ae8d1ca_1a77b53b","line":1000,"in_reply_to":"3ae8d1ca_5e6db431","updated":"2014-05-28 16:11:57.000000000","message":"Will do.","commit_id":"6fc2817844d7b58ee5977b0aded4119fea8370fc"}],"nova/conductor/manager.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e4eea2c6881bde059da395942c1cef929e3d64c0","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                request_spec, filter_properties)"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        for (instance, host) in zip(instances, hosts):"},{"line_number":742,"context_line":"            filter_properties \u003d copy.deepcopy(filter_properties)"},{"line_number":743,"context_line":"            scheduler_utils.populate_filter_properties(filter_properties,"},{"line_number":744,"context_line":"                host)"},{"line_number":745,"context_line":"            # The block_device_mapping passed from the api doesn\u0027t contain"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2Fqq8%3D","line":742,"updated":"2013-08-31 16:50:33.000000000","message":"I think that there may be a slight problem here. Are you sure we want to use the variable name filter_properties here? Do we want to copy the changes in the variable from the line below or do we want the data structure from line 739?\nIn short why do we not declare a new variable here for example:\nlocal_filter_properties \u003d copy.deepcopy(filter_properties)\nscheduler_utils.populate_filter_properties(local_filter_properties,,\n...","commit_id":"809fd205e79cb9f73afce659d0753f8ca52b3310"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"98b9093ee06f39d6a8f0f2744825cd3b290dd393","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                request_spec, filter_properties)"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        for (instance, host) in zip(instances, hosts):"},{"line_number":742,"context_line":"            filter_properties \u003d copy.deepcopy(filter_properties)"},{"line_number":743,"context_line":"            scheduler_utils.populate_filter_properties(filter_properties,"},{"line_number":744,"context_line":"                host)"},{"line_number":745,"context_line":"            # The block_device_mapping passed from the api doesn\u0027t contain"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2Fj8U%3D","line":742,"in_reply_to":"AAAASn%2F%2Fqq8%3D","updated":"2013-09-03 13:51:39.000000000","message":"It should be a new variable.  The changes from populate_filter_properties belong to one instance and should not be shared.  Good catch.","commit_id":"809fd205e79cb9f73afce659d0753f8ca52b3310"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"fdbc960157144df428e6764ca124a784cdb3d1f3","unresolved":false,"context_lines":[{"line_number":769,"context_line":"            security_groups, block_device_mapping, legacy_bdm\u003dTrue):"},{"line_number":770,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec(context, image,"},{"line_number":771,"context_line":"                                                          instances)"},{"line_number":772,"context_line":"        hosts \u003d self.scheduler_rpcapi.select_destinations(context,"},{"line_number":773,"context_line":"                request_spec, filter_properties)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"        for (instance, host) in zip(instances, hosts):"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAT3%2F%2FqYk%3D","line":772,"updated":"2014-01-03 22:02:46.000000000","message":"I have reservations about using a call here.   My fear is that it will backup the processing of other requests while blocking on the scheduler.\n\nI would be interested in keeping the asynchronous property here, either through a separate worker gthread or continuing to pass the request through the scheduler to the chosen compute(s).  Re-tries could be routed back through conductor.  (either local or remote)","commit_id":"a1dc6be30dce95488f2e13aa3bd808b443afa98f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f61b74bab23883846b1fdd4bfce618c540c08762","unresolved":false,"context_lines":[{"line_number":769,"context_line":"            security_groups, block_device_mapping, legacy_bdm\u003dTrue):"},{"line_number":770,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec(context, image,"},{"line_number":771,"context_line":"                                                          instances)"},{"line_number":772,"context_line":"        hosts \u003d self.scheduler_rpcapi.select_destinations(context,"},{"line_number":773,"context_line":"                request_spec, filter_properties)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"        for (instance, host) in zip(instances, hosts):"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAAUH%2F%2F6so%3D","line":772,"in_reply_to":"AAAAT3%2F%2FqYk%3D","updated":"2014-01-06 20:15:19.000000000","message":"I\u0027m interested in keeping a request/response pattern since it\u0027s feasible that this becomes an HTTP interface down the road.  I could create a greenthread for it but I assumed that the RPC call would trigger a switch so it wouldn\u0027t block the process here.","commit_id":"a1dc6be30dce95488f2e13aa3bd808b443afa98f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e93615ecf15be4e51fd19e18da2089456ac12102","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec(context, image,"},{"line_number":771,"context_line":"                                                          instances)"},{"line_number":772,"context_line":"        hosts \u003d self.scheduler_rpcapi.select_destinations(context,"},{"line_number":773,"context_line":"                request_spec, filter_properties)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"        for (instance, host) in zip(instances, hosts):"},{"line_number":776,"context_line":"            instance.refresh()"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F30U%3D","line":773,"updated":"2014-01-07 12:08:36.000000000","message":"What if the list of hosts is less in number than the list of instances, should we set the remaining instances into the error state, or does this call just return NoValidHost or similar?","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2006f2da9333ffac0bbb4e4df115aa1ab09cd8c4","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec(context, image,"},{"line_number":771,"context_line":"                                                          instances)"},{"line_number":772,"context_line":"        hosts \u003d self.scheduler_rpcapi.select_destinations(context,"},{"line_number":773,"context_line":"                request_spec, filter_properties)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"        for (instance, host) in zip(instances, hosts):"},{"line_number":776,"context_line":"            instance.refresh()"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F3IE%3D","line":773,"in_reply_to":"AAAAUH%2F%2F30U%3D","updated":"2014-01-07 15:12:04.000000000","message":"Look at the select_destinations implementation.  It is guaranteed to return a list \u003e\u003d the number of instances.","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"20649dcb635478ff84b6982bb2bd86f413271dd9","unresolved":false,"context_lines":[{"line_number":772,"context_line":"        hosts \u003d self.scheduler_rpcapi.select_destinations(context,"},{"line_number":773,"context_line":"                request_spec, filter_properties)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"        for (instance, host) in zip(instances, hosts):"},{"line_number":776,"context_line":"            instance.refresh()"},{"line_number":777,"context_line":"            local_filter_props \u003d copy.deepcopy(filter_properties)"},{"line_number":778,"context_line":"            scheduler_utils.populate_filter_properties(local_filter_props,"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2F6jo%3D","line":775,"updated":"2014-01-06 21:02:45.000000000","message":"Might as well use itertools.izip()","commit_id":"aca2b3ee1aa38d5226467f75e6f87219c5bf0c06"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1b4af52d4251ee26c70ffe12b18ea4c711a7f110","unresolved":false,"context_lines":[{"line_number":51,"context_line":"from nova.scheduler import utils as scheduler_utils"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# Instead of having a huge list of arguments to instance_update(), we just"},{"line_number":57,"context_line":"# accept a dict of fields to update and use this whitelist to validate it."}],"source_content_type":"text/x-python","patch_set":35,"id":"7adec928_10e53808","line":54,"updated":"2014-05-19 16:31:10.000000000","message":"Random whitespace. Not sure if this is required, but it\u0027s passing pep8 now right?","commit_id":"8eeec4e4d731f4a545ce8acae53b95793dedb5ad"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"25543baccfa405702b24fbb7c58ad014b37c497a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"from nova.scheduler import utils as scheduler_utils"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# Instead of having a huge list of arguments to instance_update(), we just"},{"line_number":57,"context_line":"# accept a dict of fields to update and use this whitelist to validate it."}],"source_content_type":"text/x-python","patch_set":35,"id":"7adec928_fe289de3","line":54,"in_reply_to":"7adec928_10e53808","updated":"2014-05-19 17:48:00.000000000","message":"Yeah, should be no need for this.","commit_id":"8eeec4e4d731f4a545ce8acae53b95793dedb5ad"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1b4af52d4251ee26c70ffe12b18ea4c711a7f110","unresolved":false,"context_lines":[{"line_number":791,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":792,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":793,"context_line":"            security_groups, block_device_mapping, legacy_bdm\u003dTrue):"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec(context, image,"},{"line_number":796,"context_line":"                                                          instances)"},{"line_number":797,"context_line":"        hosts \u003d self.scheduler_rpcapi.select_destinations(context,"}],"source_content_type":"text/x-python","patch_set":35,"id":"7adec928_f0436c3f","line":794,"updated":"2014-05-19 16:31:10.000000000","message":"Random whitespace","commit_id":"8eeec4e4d731f4a545ce8acae53b95793dedb5ad"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1b4af52d4251ee26c70ffe12b18ea4c711a7f110","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        hosts \u003d self.scheduler_rpcapi.select_destinations(context,"},{"line_number":798,"context_line":"                request_spec, filter_properties)"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        for (instance, host) in itertools.izip(instances, hosts):"},{"line_number":801,"context_line":"            instance.refresh()"},{"line_number":802,"context_line":"            local_filter_props \u003d copy.deepcopy(filter_properties)"},{"line_number":803,"context_line":"            scheduler_utils.populate_filter_properties(local_filter_props,"}],"source_content_type":"text/x-python","patch_set":35,"id":"7adec928_b082c4c5","line":800,"updated":"2014-05-19 16:31:10.000000000","message":"I could look this up, but I\u0027m lazy. I assume this gives us back a list of hosts that any of the to-be-created instances could go on and we just iterate through assigning them in order, is that right?\n\nWhat happens if one of them fails and we need to try it on the next one?\n\nCan this return fewer hosts than instances? If so, should we check and bail in that situation without building any?\n\nShould we catch something indicating an impossible scenario when we call the scheduler? Meaning, I would expect that the spec could have an impossible combination of anti-affinity or something and blow up in some way we\u0027d want to catch.","commit_id":"8eeec4e4d731f4a545ce8acae53b95793dedb5ad"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"25543baccfa405702b24fbb7c58ad014b37c497a","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        hosts \u003d self.scheduler_rpcapi.select_destinations(context,"},{"line_number":798,"context_line":"                request_spec, filter_properties)"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        for (instance, host) in itertools.izip(instances, hosts):"},{"line_number":801,"context_line":"            instance.refresh()"},{"line_number":802,"context_line":"            local_filter_props \u003d copy.deepcopy(filter_properties)"},{"line_number":803,"context_line":"            scheduler_utils.populate_filter_properties(local_filter_props,"}],"source_content_type":"text/x-python","patch_set":35,"id":"7adec928_deb84177","line":800,"in_reply_to":"7adec928_b082c4c5","updated":"2014-05-19 17:48:00.000000000","message":"select_destinations returns a list of hosts of the same size as the number of instances to be built.  It will raise an exception if the number of hosts is less than the number of instances to build.  There\u0027s no strong check around returning more hosts but they would be ignored since a retry doesn\u0027t come back here and the list isn\u0027t passed through to the compute node.  And yes, this just iterates and assigns them in order.  Nothing fancy happens here which matches how it currently works.\n\nException handling is missing here.  We should catch exceptions from the scheduler and log them as instance faults to match what currently happens.  Providing information around the exact issue, anti-affinity vs resource constraints will probably need to come later since I don\u0027t believe the scheduler does a good job of bubbling this level of detail up at the moment.","commit_id":"8eeec4e4d731f4a545ce8acae53b95793dedb5ad"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"8dd8079f9bcac18678fab677ba61eb9f1a0bbe3a","unresolved":false,"context_lines":[{"line_number":799,"context_line":"        except Exception as exc:"},{"line_number":800,"context_line":"            for instance in instances:"},{"line_number":801,"context_line":"                scheduler_driver.handle_schedule_error(context, exc,"},{"line_number":802,"context_line":"                        instance.uuid, request_spec)"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"        for (instance, host) in itertools.izip(instances, hosts):"},{"line_number":805,"context_line":"            instance.refresh()"}],"source_content_type":"text/x-python","patch_set":40,"id":"7adec928_391d7174","line":802,"updated":"2014-05-22 02:17:28.000000000","message":"Should we return here? Otherwise, the following code might throw exception.","commit_id":"b9ed70b4d9bc6f07878a464eb6c535269f526ce0"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9b3608855a7002c3d123bc2cf44fd21b9f53ad1f","unresolved":false,"context_lines":[{"line_number":799,"context_line":"        except Exception as exc:"},{"line_number":800,"context_line":"            for instance in instances:"},{"line_number":801,"context_line":"                scheduler_driver.handle_schedule_error(context, exc,"},{"line_number":802,"context_line":"                        instance.uuid, request_spec)"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"        for (instance, host) in itertools.izip(instances, hosts):"},{"line_number":805,"context_line":"            instance.refresh()"}],"source_content_type":"text/x-python","patch_set":40,"id":"7adec928_4c4ee0c2","line":802,"in_reply_to":"7adec928_391d7174","updated":"2014-05-22 18:33:54.000000000","message":"argh.  Yes, this should return, thanks.","commit_id":"b9ed70b4d9bc6f07878a464eb6c535269f526ce0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"6d9dd172d7847f0d7f6c3957d736a351ff7f16f6","unresolved":false,"context_lines":[{"line_number":788,"context_line":"                       exc_info\u003dTrue)"},{"line_number":789,"context_line":"            raise exception.MigrationError(reason\u003dex)"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    @messaging.expected_exceptions(exception.InstanceNotFound)"},{"line_number":792,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":793,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":794,"context_line":"            security_groups, block_device_mapping, legacy_bdm\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":42,"id":"3ae8d1ca_783b733a","line":791,"updated":"2014-05-28 09:26:24.000000000","message":"The addition of this decorator is the only change since patch set 41, which is there to handle the InstanceNotFound errors seen in the n-cond log in http://logs.openstack.org/94/43194/41/check/check-tempest-dsvm-full/3f8c6ec/console.html\n\nI\u0027m not sure this makes sense - the decorator means we expect this exception to occur, it shouldn\u0027t be logged and the client will handle it. In this case, we\u0027re being called via cast() so obviously the client isn\u0027t going to handle it.","commit_id":"6fc2817844d7b58ee5977b0aded4119fea8370fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c22982362365e9b5bf88ddca6cf97fd288539cd3","unresolved":false,"context_lines":[{"line_number":788,"context_line":"                       exc_info\u003dTrue)"},{"line_number":789,"context_line":"            raise exception.MigrationError(reason\u003dex)"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    @messaging.expected_exceptions(exception.InstanceNotFound)"},{"line_number":792,"context_line":"    def build_instances(self, context, instances, image, filter_properties,"},{"line_number":793,"context_line":"            admin_password, injected_files, requested_networks,"},{"line_number":794,"context_line":"            security_groups, block_device_mapping, legacy_bdm\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":42,"id":"3ae8d1ca_fe8da032","line":791,"in_reply_to":"3ae8d1ca_783b733a","updated":"2014-05-28 13:40:19.000000000","message":"Right, even more reason not to log it. We know that we might be called after the instance has been deleted, in which case we\u0027ll blow up for InstanceNotFound, which is expected. We don\u0027t want to litter the logs of conductor (which right now are 100% clean in the gate) with errors which we know are possible and non-fatal.","commit_id":"6fc2817844d7b58ee5977b0aded4119fea8370fc"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"6d9dd172d7847f0d7f6c3957d736a351ff7f16f6","unresolved":false,"context_lines":[{"line_number":804,"context_line":"            return"},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"        for (instance, host) in itertools.izip(instances, hosts):"},{"line_number":807,"context_line":"            instance.refresh()"},{"line_number":808,"context_line":"            local_filter_props \u003d copy.deepcopy(filter_properties)"},{"line_number":809,"context_line":"            scheduler_utils.populate_filter_properties(local_filter_props,"},{"line_number":810,"context_line":"                host)"}],"source_content_type":"text/x-python","patch_set":42,"id":"3ae8d1ca_6cbad5df","line":807,"updated":"2014-05-28 09:26:24.000000000","message":"This is where the InstanceNotFound exception is coming from. If we really need to refresh, perhaps we should just handle InstanceNotFound and log it before continuing with the build?\n\nNot entirely clear what would have happened in the previous implementation.","commit_id":"6fc2817844d7b58ee5977b0aded4119fea8370fc"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"d318fb79d53e9834e1c96745c4c2540b52c9f348","unresolved":false,"context_lines":[{"line_number":804,"context_line":"            return"},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"        for (instance, host) in itertools.izip(instances, hosts):"},{"line_number":807,"context_line":"            instance.refresh()"},{"line_number":808,"context_line":"            local_filter_props \u003d copy.deepcopy(filter_properties)"},{"line_number":809,"context_line":"            scheduler_utils.populate_filter_properties(local_filter_props,"},{"line_number":810,"context_line":"                host)"}],"source_content_type":"text/x-python","patch_set":42,"id":"3ae8d1ca_7a2a797f","line":807,"in_reply_to":"3ae8d1ca_5e269417","updated":"2014-05-28 14:27:04.000000000","message":"Yeah, good point about not wanting to log this.\n\nI do still think this is an abuse of the decorator though. We never want this passed to the client and we know where in this large function we expect it to occur.\n\nMy \"log it before continuing to build\" was more about whether we should continue building the other instances if this one is deleted.","commit_id":"6fc2817844d7b58ee5977b0aded4119fea8370fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c22982362365e9b5bf88ddca6cf97fd288539cd3","unresolved":false,"context_lines":[{"line_number":804,"context_line":"            return"},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"        for (instance, host) in itertools.izip(instances, hosts):"},{"line_number":807,"context_line":"            instance.refresh()"},{"line_number":808,"context_line":"            local_filter_props \u003d copy.deepcopy(filter_properties)"},{"line_number":809,"context_line":"            scheduler_utils.populate_filter_properties(local_filter_props,"},{"line_number":810,"context_line":"                host)"}],"source_content_type":"text/x-python","patch_set":42,"id":"3ae8d1ca_5e269417","line":807,"in_reply_to":"3ae8d1ca_6cbad5df","updated":"2014-05-28 13:40:19.000000000","message":"I think it\u0027s fine to use the decorator in this case, but since this one is so easy (being only one place), maybe just catching it is better. I don\u0027t have a strong opinion.","commit_id":"6fc2817844d7b58ee5977b0aded4119fea8370fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"64328b73f7dc6b5c05a6a62c70149096c0b614e8","unresolved":false,"context_lines":[{"line_number":804,"context_line":"            return"},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"        for (instance, host) in itertools.izip(instances, hosts):"},{"line_number":807,"context_line":"            instance.refresh()"},{"line_number":808,"context_line":"            local_filter_props \u003d copy.deepcopy(filter_properties)"},{"line_number":809,"context_line":"            scheduler_utils.populate_filter_properties(local_filter_props,"},{"line_number":810,"context_line":"                host)"}],"source_content_type":"text/x-python","patch_set":42,"id":"3ae8d1ca_daf9cdc9","line":807,"in_reply_to":"3ae8d1ca_7a2a797f","updated":"2014-05-28 14:32:14.000000000","message":"Yeah, that\u0027s a good point. We might\u0027ve been asked to build ten and had one deleted.. We should continue to process the list in that case.","commit_id":"6fc2817844d7b58ee5977b0aded4119fea8370fc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"548d049908383fbfcfcebc3b24df5b98ab73fd0c","unresolved":false,"context_lines":[{"line_number":815,"context_line":"            # instance specific information"},{"line_number":816,"context_line":"            bdo \u003d block_device_object"},{"line_number":817,"context_line":"            bdms \u003d bdo.BlockDeviceMappingList.get_by_instance_uuid(context,"},{"line_number":818,"context_line":"                    instance.uuid)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"            self.compute_rpcapi.build_and_run_instance(context,"},{"line_number":821,"context_line":"                    instance\u003dinstance, host\u003dhost[\u0027host\u0027], image\u003dimage,"}],"source_content_type":"text/x-python","patch_set":43,"id":"3ae8d1ca_55d2c700","line":818,"updated":"2014-05-29 14:16:36.000000000","message":"Hmm, in the context of the previous discussion, I wonder if this could raise an exception if the delete of one of these instances fully completes before we get here.","commit_id":"70196c4854e6cc1cb566dc9fc5b1a3397a4b69ab"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"4c40301cf71765618624d001b412b5e20349ffc1","unresolved":false,"context_lines":[{"line_number":815,"context_line":"            # instance specific information"},{"line_number":816,"context_line":"            bdo \u003d block_device_object"},{"line_number":817,"context_line":"            bdms \u003d bdo.BlockDeviceMappingList.get_by_instance_uuid(context,"},{"line_number":818,"context_line":"                    instance.uuid)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"            self.compute_rpcapi.build_and_run_instance(context,"},{"line_number":821,"context_line":"                    instance\u003dinstance, host\u003dhost[\u0027host\u0027], image\u003dimage,"}],"source_content_type":"text/x-python","patch_set":43,"id":"3ae8d1ca_550d673d","line":818,"in_reply_to":"3ae8d1ca_55d2c700","updated":"2014-05-29 14:25:24.000000000","message":"That\u0027s a good thought.  Looking through the code it appears that this would just get an empty list in that case since it\u0027s filtering block devices by instance uuid and not looking up the instance at any point.","commit_id":"70196c4854e6cc1cb566dc9fc5b1a3397a4b69ab"}],"nova/tests/compute/test_compute_mgr.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0298c23aef2940ff6c21021f12fc6ecfe097a1e9","unresolved":false,"context_lines":[{"line_number":1241,"context_line":"        self.mox.StubOutWithMock(self.compute, \u0027_get_instance_nw_info\u0027)"},{"line_number":1242,"context_line":"        self.mox.StubOutWithMock(self.compute, \u0027_allocate_network\u0027)"},{"line_number":1243,"context_line":"        #self.compute._get_instance_nw_info(self.context,"},{"line_number":1244,"context_line":"        #        self.instance).AndReturn(self.network_info)"},{"line_number":1245,"context_line":"        self.compute._allocate_network(self.context, self.instance,"},{"line_number":1246,"context_line":"                self.requested_networks, None, self.security_groups, None)"},{"line_number":1247,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2BlWc%3D","line":1244,"updated":"2013-11-22 19:59:26.000000000","message":"Again, I\u0027d rather we simply removed these lines rather than commenting them out…","commit_id":"fe14f3e29ef3eeb4c0d5eddd7c152a5121d6b164"}]}
