)]}'
{"nova/compute/resource_tracker.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2148514cca79bd9639435e3f4a745abf123bec7d","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    @utils.synchronized(COMPUTE_RESOURCE_SEMAPHORE)"},{"line_number":343,"context_line":"    def abort_instance_claim(self, context, instance):"},{"line_number":344,"context_line":"        \"\"\"Remove usage from the given instance.\"\"\""},{"line_number":345,"context_line":"        self._update_usage_from_instance(context, instance, is_removed\u003dTrue)"},{"line_number":346,"context_line":"        self.scheduler_client.reportclient.update_instance_allocation("},{"line_number":347,"context_line":"                self.compute_node, instance, -1)"},{"line_number":348,"context_line":"        instance.clear_numa_topology()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_7f3d142a","line":345,"range":{"start_line":345,"start_character":13,"end_line":345,"end_character":40},"updated":"2016-09-13 12:42:56.000000000","message":"seems this logic fit for this function, can we consider move your new code into this function?","commit_id":"4fe915b6312dcc566d457f6b5866b09916d021d5"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"eb66ab5e1c1745abd114e243dc45626422717de7","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    @utils.synchronized(COMPUTE_RESOURCE_SEMAPHORE)"},{"line_number":343,"context_line":"    def abort_instance_claim(self, context, instance):"},{"line_number":344,"context_line":"        \"\"\"Remove usage from the given instance.\"\"\""},{"line_number":345,"context_line":"        self._update_usage_from_instance(context, instance, is_removed\u003dTrue)"},{"line_number":346,"context_line":"        self.scheduler_client.reportclient.update_instance_allocation("},{"line_number":347,"context_line":"                self.compute_node, instance, -1)"},{"line_number":348,"context_line":"        instance.clear_numa_topology()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_4c3a1d38","line":345,"range":{"start_line":345,"start_character":13,"end_line":345,"end_character":40},"in_reply_to":"9a89bdaa_7f3d142a","updated":"2016-09-14 00:31:06.000000000","message":"yea, but at line 907, I hope they didn\u0027t do twice for the update of instance","commit_id":"4fe915b6312dcc566d457f6b5866b09916d021d5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7b56fbb77e78d2d5d537d9d95cd1fcdf22d61fcb","unresolved":false,"context_lines":[{"line_number":905,"context_line":"                instance_tracked.append(instance)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":908,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":909,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":910,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":911,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_e99884c2","line":908,"updated":"2016-09-13 15:53:02.000000000","message":"This right here is the only place I support adding a call to update_instance_allocations(). The other ones above are unnecessary because the normal \"heal\" periodic task will take care of them.","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"353c31e48eab53f314589ef44eed390fe748670b","unresolved":false,"context_lines":[{"line_number":905,"context_line":"                instance_tracked.append(instance)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":908,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":909,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":910,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":911,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_4c493d8b","line":908,"in_reply_to":"9a89bdaa_e99884c2","updated":"2016-09-14 00:39:21.000000000","message":"Yes, the other place I added is \u0027 update_instance_allocation\u0027(singular), not this one.","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"f3faebb738816d8512488b6503cb679ba01749b8","unresolved":false,"context_lines":[{"line_number":862,"context_line":"                self.pci_tracker.update_pci_for_instance(context,"},{"line_number":863,"context_line":"                                                         instance,"},{"line_number":864,"context_line":"                                                         sign\u003dsign)"},{"line_number":865,"context_line":"                self.scheduler_client.reportclient.update_instance_allocation("},{"line_number":866,"context_line":"                    self.compute_node, instance, sign)"},{"line_number":867,"context_line":"            # new instance, update compute node resource usage:"},{"line_number":868,"context_line":"            self._update_usage(self._get_usage_dict(instance), sign\u003dsign)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_bb73d54c","line":865,"range":{"start_line":865,"start_character":12,"end_line":865,"end_character":16},"updated":"2016-09-14 04:19:15.000000000","message":"Wrong indent here. It shouldn\u0027t be moved into `if self.pci_tracker` block.","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"f3faebb738816d8512488b6503cb679ba01749b8","unresolved":false,"context_lines":[{"line_number":893,"context_line":"        self.compute_node.current_workload \u003d 0"},{"line_number":894,"context_line":"        self.compute_node.running_vms \u003d 0"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        instance_tracked \u003d []"},{"line_number":897,"context_line":"        for instance in instances:"},{"line_number":898,"context_line":"            if instance.vm_state not in vm_states.ALLOW_RESOURCE_REMOVAL:"},{"line_number":899,"context_line":"                self._update_usage_from_instance(context, instance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_06870c62","line":896,"range":{"start_line":896,"start_character":8,"end_line":896,"end_character":29},"updated":"2016-09-14 04:19:15.000000000","message":"Why not reuse `self.tracked_instances` @883, it should have recorded all the tracked instances after for-loop @897.","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c030035c67e7263a96007e8cf37d9d415f2b18fe","unresolved":false,"context_lines":[{"line_number":893,"context_line":"        self.compute_node.current_workload \u003d 0"},{"line_number":894,"context_line":"        self.compute_node.running_vms \u003d 0"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        instance_tracked \u003d []"},{"line_number":897,"context_line":"        for instance in instances:"},{"line_number":898,"context_line":"            if instance.vm_state not in vm_states.ALLOW_RESOURCE_REMOVAL:"},{"line_number":899,"context_line":"                self._update_usage_from_instance(context, instance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_9f0a65d1","line":896,"range":{"start_line":896,"start_character":8,"end_line":896,"end_character":29},"in_reply_to":"7a8ec9b2_06870c62","updated":"2016-09-14 13:46:24.000000000","message":"yea, you are right.","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"eb3d9584515285355efc1376346bd0ced62bba20","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                instance_tracked.append(instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":903,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_854961d3","line":903,"updated":"2016-09-13 20:21:30.000000000","message":"Honestly, I don\u0027t really know we have to do this here if we\u0027re updating the instance allocation records with the loop in _update_usage_from_instance().","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ed587b1e663a529b6f9aefffc39004d1085c960c","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                instance_tracked.append(instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":903,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_6f134b5d","line":903,"in_reply_to":"7a8ec9b2_0a263868","updated":"2016-09-14 00:44:20.000000000","message":"@Jay, The RT get all the instances on the host by https://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L555 \n\nBut \"reportclient.update_instance_allocations()\" will get all the allocations on the placement service.\n\nThere may have some allocations belong to the instance which isn\u0027t on the host.","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cabb8ab2d94b8b5ecce6a819d0f6be32810cf8b4","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                instance_tracked.append(instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":903,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_b5fcc43f","line":903,"in_reply_to":"7a8ec9b2_123cae92","updated":"2016-09-14 02:40:05.000000000","message":"yeah, Jay\u0027s propose also works, rename the method. If the name is good, then this way sounds easy. Or another way I suggested in https://review.openstack.org/#/c/369147/7/nova/scheduler/client/report.py","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d565f39686300dbc244db55fe90ef7758866b363","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                instance_tracked.append(instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":903,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_123cae92","line":903,"in_reply_to":"7a8ec9b2_6f134b5d","updated":"2016-09-14 01:43:17.000000000","message":"OK, yeah, this was quite confusing because of the same-named method. If we could just rename reportclient.update_instance_allocations() to be reportclient.remove_deleted_instances() I would support this. Sorry for being picky.","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bbf9e705ed414b085cc893a9ee1dd0a88cd8e3e4","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                instance_tracked.append(instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":903,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_c87380b3","line":903,"in_reply_to":"7a8ec9b2_854961d3","updated":"2016-09-13 20:30:44.000000000","message":"We need to do this part to ever pick up instances that we have allocations for, but which don\u0027t exist on our host, which is the stated intent of this patch.","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"025888920cffa9d27e3e1e04a024066934212529","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                instance_tracked.append(instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":903,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_e4e2fc02","line":903,"in_reply_to":"7a8ec9b2_a6c81876","updated":"2016-09-14 13:35:27.000000000","message":"Yep, that rename is fine with me.","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"f3faebb738816d8512488b6503cb679ba01749b8","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                instance_tracked.append(instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":903,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_a6c81876","line":903,"in_reply_to":"7a8ec9b2_b5fcc43f","updated":"2016-09-14 04:19:15.000000000","message":"It is a correction method because currently some instances\u0027 deletion/creation are not reported to placement service correctly. I think the method name should reflect this purpose and highlight that inconsistency need to be fixed.","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3779382787d6eb58ca6e27b8672c0c0055c8a1db","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                instance_tracked.append(instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.update_instance_allocations("},{"line_number":903,"context_line":"                self.compute_node, instance_tracked)"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_0a263868","line":903,"in_reply_to":"7a8ec9b2_c87380b3","updated":"2016-09-13 23:35:22.000000000","message":"Dan, but the instances that are passed to reportclient.update_instance_allocations() here are the same ones that were already sent to reportclient.update_instance_allocation() (note: singular form) in the loop above.","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"74c137b25061413d44a36c3251d7f2980549e65b","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                self._update_usage_from_instance(context, instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.remove_deleted_instances("},{"line_number":903,"context_line":"                self.compute_node, self.tracked_instances.values())"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_65b1788f","line":903,"updated":"2016-09-14 17:08:11.000000000","message":"Perhaps a guard here to not call remove_deleted_instances() if tracked_instances is empty?","commit_id":"129b0dfda632e1f9ddfff26096fdb2db19a4f0c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5d75597a755f3b25526cac1f752f03261be46947","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                self._update_usage_from_instance(context, instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.remove_deleted_instances("},{"line_number":903,"context_line":"                self.compute_node, self.tracked_instances.values())"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_ec73ac13","line":903,"in_reply_to":"7a8ec9b2_2ca594b4","updated":"2016-09-14 19:21:18.000000000","message":"Ah, totes. Good catch/point.","commit_id":"129b0dfda632e1f9ddfff26096fdb2db19a4f0c4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c10caee87ca0825f9dffa5197041791a3b88afaf","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                self._update_usage_from_instance(context, instance)"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        self.scheduler_client.reportclient.remove_deleted_instances("},{"line_number":903,"context_line":"                self.compute_node, self.tracked_instances.values())"},{"line_number":904,"context_line":"        self.compute_node.free_ram_mb \u003d max(0, self.compute_node.free_ram_mb)"},{"line_number":905,"context_line":"        self.compute_node.free_disk_gb \u003d max(0, self.compute_node.free_disk_gb)"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_2ca594b4","line":903,"in_reply_to":"7a8ec9b2_65b1788f","updated":"2016-09-14 19:17:42.000000000","message":"If we do that, then we won\u0027t clean up stale allocations if we have no instances currently. So, if I evacuate all my instances while the compute node is down, it starts up realizes that they all moved, it will never call this to clean up potentially stale allocations.","commit_id":"129b0dfda632e1f9ddfff26096fdb2db19a4f0c4"}],"nova/scheduler/client/report.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2148514cca79bd9639435e3f4a745abf123bec7d","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        LOG.debug(\u0027Sending allocation for instance %s\u0027,"},{"line_number":333,"context_line":"                  allocations,"},{"line_number":334,"context_line":"                  instance\u003dinstance)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        r \u003d self.put(url, allocations)"},{"line_number":337,"context_line":"        if r:"},{"line_number":338,"context_line":"            LOG.info(_LI(\u0027Submitted allocation for instance\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_dfff00ff","line":335,"updated":"2016-09-13 12:42:56.000000000","message":"unrelated change","commit_id":"4fe915b6312dcc566d457f6b5866b09916d021d5"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2148514cca79bd9639435e3f4a745abf123bec7d","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def update_instance_allocations(self, compute_node, instances):"},{"line_number":379,"context_line":"        allocations \u003d self._get_allocations(compute_node)"},{"line_number":380,"context_line":"        if allocations is None:"},{"line_number":381,"context_line":"            allocations \u003d {}"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        instance_dict \u003d {instance.uuid: instance for instance in instances}"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_3a22baa3","line":380,"range":{"start_line":380,"start_character":26,"end_line":380,"end_character":30},"updated":"2016-09-13 12:42:56.000000000","message":"seems this can\u0027t be None?","commit_id":"4fe915b6312dcc566d457f6b5866b09916d021d5"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"eb66ab5e1c1745abd114e243dc45626422717de7","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def update_instance_allocations(self, compute_node, instances):"},{"line_number":379,"context_line":"        allocations \u003d self._get_allocations(compute_node)"},{"line_number":380,"context_line":"        if allocations is None:"},{"line_number":381,"context_line":"            allocations \u003d {}"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        instance_dict \u003d {instance.uuid: instance for instance in instances}"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_ec1129b1","line":380,"range":{"start_line":380,"start_character":26,"end_line":380,"end_character":30},"in_reply_to":"9a89bdaa_3a22baa3","updated":"2016-09-14 00:31:06.000000000","message":"When the placement service is not here, the safe_connect decorator will return None","commit_id":"4fe915b6312dcc566d457f6b5866b09916d021d5"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2148514cca79bd9639435e3f4a745abf123bec7d","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        instance_dict \u003d {instance.uuid: instance for instance in instances}"},{"line_number":384,"context_line":"        removed_instances \u003d set(allocations.keys()) - set(instance_dict.keys())"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        for instance in instances:"},{"line_number":387,"context_line":"            self._allocate_for_instance(compute_node, instance)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        for uuid in removed_instances:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_3aa71a0c","line":386,"range":{"start_line":386,"start_character":24,"end_line":386,"end_character":33},"updated":"2016-09-13 12:42:56.000000000","message":"even if it\u0027s a \u0027removed\u0027 instance, we will still allocate for it ?","commit_id":"4fe915b6312dcc566d457f6b5866b09916d021d5"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"eb66ab5e1c1745abd114e243dc45626422717de7","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        instance_dict \u003d {instance.uuid: instance for instance in instances}"},{"line_number":384,"context_line":"        removed_instances \u003d set(allocations.keys()) - set(instance_dict.keys())"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        for instance in instances:"},{"line_number":387,"context_line":"            self._allocate_for_instance(compute_node, instance)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        for uuid in removed_instances:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_ec7849fb","line":386,"range":{"start_line":386,"start_character":24,"end_line":386,"end_character":33},"in_reply_to":"9a89bdaa_3aa71a0c","updated":"2016-09-14 00:31:06.000000000","message":"No, those are the instance on the host and they aren\u0027t removed.","commit_id":"4fe915b6312dcc566d457f6b5866b09916d021d5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6aeb04b297755f83261a25f707f12db6fa68aaa7","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        LOG.debug(\u0027Sending allocation for instance %s\u0027,"},{"line_number":333,"context_line":"                  allocations,"},{"line_number":334,"context_line":"                  instance\u003dinstance)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        r \u003d self.put(url, allocations)"},{"line_number":337,"context_line":"        if r:"},{"line_number":338,"context_line":"            LOG.info(_LI(\u0027Submitted allocation for instance\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_f315d33f","line":335,"updated":"2016-09-13 15:29:20.000000000","message":"Random whitespace change here.","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c10c41c304ba530d4bdb8adb2047307b8c1cd4fb","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        LOG.debug(\u0027Sending allocation for instance %s\u0027,"},{"line_number":333,"context_line":"                  allocations,"},{"line_number":334,"context_line":"                  instance\u003dinstance)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        r \u003d self.put(url, allocations)"},{"line_number":337,"context_line":"        if r:"},{"line_number":338,"context_line":"            LOG.info(_LI(\u0027Submitted allocation for instance\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_d045256f","line":335,"updated":"2016-09-13 15:28:20.000000000","message":"unrelated whitespace change","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1051d9a5a9d1e07a9a1120110a700a863f3211b9","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        LOG.debug(\u0027Sending allocation for instance %s\u0027,"},{"line_number":333,"context_line":"                  allocations,"},{"line_number":334,"context_line":"                  instance\u003dinstance)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        r \u003d self.put(url, allocations)"},{"line_number":337,"context_line":"        if r:"},{"line_number":338,"context_line":"            LOG.info(_LI(\u0027Submitted allocation for instance\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_2c8311ce","line":335,"in_reply_to":"9a89bdaa_f315d33f","updated":"2016-09-14 00:37:51.000000000","message":"Done","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c10c41c304ba530d4bdb8adb2047307b8c1cd4fb","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                 \u0027text\u0027: r.text})"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    @safe_connect"},{"line_number":349,"context_line":"    def _delete_allocation_for_instance(self, uuid):"},{"line_number":350,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % uuid"},{"line_number":351,"context_line":"        r \u003d self.delete(url)"},{"line_number":352,"context_line":"        if r:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_d321af9f","line":349,"range":{"start_line":349,"start_character":46,"end_line":349,"end_character":50},"updated":"2016-09-13 15:28:20.000000000","message":"I guess this is because the new method only has the uuids, not the instances. But it doesn\u0027t seem like you actually need to make this change, see comment below.","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1051d9a5a9d1e07a9a1120110a700a863f3211b9","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                 \u0027text\u0027: r.text})"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    @safe_connect"},{"line_number":349,"context_line":"    def _delete_allocation_for_instance(self, uuid):"},{"line_number":350,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % uuid"},{"line_number":351,"context_line":"        r \u003d self.delete(url)"},{"line_number":352,"context_line":"        if r:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_ec5f6973","line":349,"range":{"start_line":349,"start_character":46,"end_line":349,"end_character":50},"in_reply_to":"9a89bdaa_d321af9f","updated":"2016-09-14 00:37:51.000000000","message":"yea, just as Dan said at line 390","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c10c41c304ba530d4bdb8adb2047307b8c1cd4fb","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % uuid"},{"line_number":351,"context_line":"        r \u003d self.delete(url)"},{"line_number":352,"context_line":"        if r:"},{"line_number":353,"context_line":"            LOG.info(_LI(\u0027Deleted allocation for instance %s\u0027),"},{"line_number":354,"context_line":"                     uuid)"},{"line_number":355,"context_line":"        else:"},{"line_number":356,"context_line":"            LOG.warning("},{"line_number":357,"context_line":"                _LW(\u0027Unable to delete allocation for instance \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_b03981f4","line":354,"range":{"start_line":353,"start_character":12,"end_line":354,"end_character":26},"updated":"2016-09-13 15:28:20.000000000","message":"Shouldn\u0027t change this, just pass instance_uuid\u003duuid kwarg instead of instance\u003dinstance.","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c10c41c304ba530d4bdb8adb2047307b8c1cd4fb","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        else:"},{"line_number":376,"context_line":"            return resp.json()[\u0027allocations\u0027]"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def update_instance_allocations(self, compute_node, instances):"},{"line_number":379,"context_line":"        allocations \u003d self._get_allocations(compute_node)"},{"line_number":380,"context_line":"        if allocations is None:"},{"line_number":381,"context_line":"            allocations \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_331c9b69","line":378,"updated":"2016-09-13 15:28:20.000000000","message":"nit: we might want a docstring on this method since it\u0027s basically the same name as the one above, but on multiple instances.","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6aeb04b297755f83261a25f707f12db6fa68aaa7","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        removed_instances \u003d set(allocations.keys()) - set(instance_dict.keys())"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        for instance in instances:"},{"line_number":387,"context_line":"            self._allocate_for_instance(compute_node, instance)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        for uuid in removed_instances:"},{"line_number":390,"context_line":"            self._delete_allocation_for_instance(uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_f3fb13bf","line":387,"updated":"2016-09-13 15:29:20.000000000","message":"We could not do this part and leave it to the existing call to handle the instances that do exist, right?","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1051d9a5a9d1e07a9a1120110a700a863f3211b9","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        removed_instances \u003d set(allocations.keys()) - set(instance_dict.keys())"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        for instance in instances:"},{"line_number":387,"context_line":"            self._allocate_for_instance(compute_node, instance)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        for uuid in removed_instances:"},{"line_number":390,"context_line":"            self._delete_allocation_for_instance(uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_6c77d9d4","line":387,"in_reply_to":"9a89bdaa_f3fb13bf","updated":"2016-09-14 00:37:51.000000000","message":"That is why I removed the client call at https://review.openstack.org/#/c/369147/5/nova/compute/resource_tracker.py@867","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c10c41c304ba530d4bdb8adb2047307b8c1cd4fb","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            self._allocate_for_instance(compute_node, instance)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        for uuid in removed_instances:"},{"line_number":390,"context_line":"            self._delete_allocation_for_instance(uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_538aff64","line":390,"range":{"start_line":390,"start_character":17,"end_line":390,"end_character":48},"updated":"2016-09-13 15:28:20.000000000","message":"You don\u0027t need to change this if you just pass the instance in via instance_dict[uuid]. Or will uuid possibly not be in instance_dict?","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"02734f0eae9e114ad12d2890cc6281342c586050","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            self._allocate_for_instance(compute_node, instance)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        for uuid in removed_instances:"},{"line_number":390,"context_line":"            self._delete_allocation_for_instance(uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_4405d711","line":390,"range":{"start_line":390,"start_character":17,"end_line":390,"end_character":48},"in_reply_to":"9a89bdaa_538aff64","updated":"2016-09-13 16:13:45.000000000","message":"It can\u0027t be in instance_dict, because removed_instances is the set of uuids that are in allocations but not instance_dict.","commit_id":"1d392b2ae39a466fced77e8be3597de37e389a7c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8e4e35f2d2345e095c0c13a62197425ce2f2cad1","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        instance_dict \u003d {instance.uuid: instance for instance in instances}"},{"line_number":383,"context_line":"        removed_instances \u003d set(allocations.keys()) - set(instance_dict.keys())"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        for uuid in removed_instances:"},{"line_number":386,"context_line":"            LOG.warning(_LW(\u0027Deleting stale allocation for instance %s\u0027),"},{"line_number":387,"context_line":"                        uuid)"},{"line_number":388,"context_line":"            self._delete_allocation_for_instance(uuid)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_0f872762","line":385,"range":{"start_line":385,"start_character":8,"end_line":385,"end_character":38},"updated":"2016-09-14 00:52:52.000000000","message":"@Dan, I have thing about this way. The strange thing for this way is this API called \"reportclient.update_instance_allocations()\", But it didn\u0027t update the existed instances.\n\nBut yes,  at the point, we want to reduce the risk. There is another idea:\n\nWe add parameter \u0027skip_update_placement\u0027 to the function \"_update_usage_from_instance\". The default value is False. We only set it to True at https://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L900\n\nThen we call the client.report.update_instance_allocations (it still update existed instance)\n\nThat avoid us move the client call out of \"_update_usage_from_instance\" to many places. And the only strange thing is the parameter \"skip_update_placement\"","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"a08b099805e07e78ce4722e6cd20ef075c2e90d3","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        removed_instances \u003d set(allocations.keys()) - set(instance_dict.keys())"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        for uuid in removed_instances:"},{"line_number":386,"context_line":"            LOG.warning(_LW(\u0027Deleting stale allocation for instance %s\u0027),"},{"line_number":387,"context_line":"                        uuid)"},{"line_number":388,"context_line":"            self._delete_allocation_for_instance(uuid)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_56fd2a39","line":386,"range":{"start_line":386,"start_character":16,"end_line":386,"end_character":23},"updated":"2016-09-14 13:12:20.000000000","message":"at least this should be a valid update, so not a warning?","commit_id":"038948fbe7caa354531b4ea48987189139cdb969"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d0eec7cc91b51e3837f5866b53a66ae5b80ba05b","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        else:"},{"line_number":375,"context_line":"            return resp.json()[\u0027allocations\u0027]"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def remove_deleted_instances(self, compute_node, instances):"},{"line_number":378,"context_line":"        allocations \u003d self._get_allocations(compute_node)"},{"line_number":379,"context_line":"        if allocations is None:"},{"line_number":380,"context_line":"            allocations \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_e5882825","line":377,"range":{"start_line":377,"start_character":53,"end_line":377,"end_character":62},"updated":"2016-09-14 16:58:34.000000000","message":"Minor nit: when I see this name, I think it will be an InstanceList, or at least instance objects/dicts. Since this is a list of UUIDs, a name like \u0027instance_uuids\u0027 would make that clearer.","commit_id":"129b0dfda632e1f9ddfff26096fdb2db19a4f0c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"74c137b25061413d44a36c3251d7f2980549e65b","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            allocations \u003d {}"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        instance_dict \u003d {instance.uuid: instance for instance in instances}"},{"line_number":383,"context_line":"        removed_instances \u003d set(allocations.keys()) - set(instance_dict.keys())"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        for uuid in removed_instances:"},{"line_number":386,"context_line":"            LOG.warning(_LW(\u0027Deleting stale allocation for instance %s\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_b03580db","line":383,"updated":"2016-09-14 17:08:11.000000000","message":"What if there are no allocations but instances is not empty? The call to _delete_allocation_for_instance() below will blow up with a 404, no?","commit_id":"129b0dfda632e1f9ddfff26096fdb2db19a4f0c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5d75597a755f3b25526cac1f752f03261be46947","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            allocations \u003d {}"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        instance_dict \u003d {instance.uuid: instance for instance in instances}"},{"line_number":383,"context_line":"        removed_instances \u003d set(allocations.keys()) - set(instance_dict.keys())"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        for uuid in removed_instances:"},{"line_number":386,"context_line":"            LOG.warning(_LW(\u0027Deleting stale allocation for instance %s\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_ece1ec9b","line":383,"in_reply_to":"7a8ec9b2_8cd228ff","updated":"2016-09-14 19:21:18.000000000","message":"lol, I clearly don\u0027t have my brain screwed on right today :(","commit_id":"129b0dfda632e1f9ddfff26096fdb2db19a4f0c4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c10caee87ca0825f9dffa5197041791a3b88afaf","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            allocations \u003d {}"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        instance_dict \u003d {instance.uuid: instance for instance in instances}"},{"line_number":383,"context_line":"        removed_instances \u003d set(allocations.keys()) - set(instance_dict.keys())"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        for uuid in removed_instances:"},{"line_number":386,"context_line":"            LOG.warning(_LW(\u0027Deleting stale allocation for instance %s\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8ec9b2_8cd228ff","line":383,"in_reply_to":"7a8ec9b2_b03580db","updated":"2016-09-14 19:17:42.000000000","message":"I\u0027m confused. An empty set minus any other set is still empty. If removed_instances is empty, we won\u0027t do anything in the loop below.","commit_id":"129b0dfda632e1f9ddfff26096fdb2db19a4f0c4"}]}
