)]}'
{"nova/compute/resource_tracker.py":[{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"1920b59177dc6c670c11de7f8cf1f2fa9e18a427","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                \u0027pci_passthrough_devices\u0027)):"},{"line_number":352,"context_line":"                if dev[\u0027dev_type\u0027] \u003d\u003d \u0027type-PF\u0027:"},{"line_number":353,"context_line":"                    continue"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"                if self.pci_filter.device_assignable(dev):"},{"line_number":356,"context_line":"                    devs.append(dev)"},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_9a602e0f","side":"PARENT","line":354,"updated":"2015-01-12 13:03:03.000000000","message":"ditto","commit_id":"f795f048c9add52d52d2bb2264802bfc28067ccf"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"1920b59177dc6c670c11de7f8cf1f2fa9e18a427","unresolved":false,"context_lines":[{"line_number":354,"context_line":""},{"line_number":355,"context_line":"                if self.pci_filter.device_assignable(dev):"},{"line_number":356,"context_line":"                    devs.append(dev)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"            self.pci_tracker.set_hvdevs(devs)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # Grab all instances assigned to this node:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_ba65ea1e","side":"PARENT","line":357,"updated":"2015-01-12 13:03:03.000000000","message":"ditto","commit_id":"f795f048c9add52d52d2bb2264802bfc28067ccf"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"1920b59177dc6c670c11de7f8cf1f2fa9e18a427","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                        ctxt, self.compute_node.id)"},{"line_number":350,"context_line":"            devs \u003d []"},{"line_number":351,"context_line":"            for dev in jsonutils.loads(resources.pop("},{"line_number":352,"context_line":"                    \u0027pci_passthrough_devices\u0027)):"},{"line_number":353,"context_line":"                if dev[\u0027dev_type\u0027] \u003d\u003d \u0027type-PF\u0027:"},{"line_number":354,"context_line":"                    continue"},{"line_number":355,"context_line":"                if self.pci_filter.device_assignable(dev):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_7aa4624b","line":352,"updated":"2015-01-12 13:03:03.000000000","message":"unrelated changes","commit_id":"ffacc75fc80da6282dd6a3fd7312a4c7878c4818"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"83c808948a1b417411b73bcd56df7532b4b5928c","unresolved":false,"context_lines":[{"line_number":344,"context_line":"    def _update_available_resource(self, context, resources):"},{"line_number":345,"context_line":"        if \u0027pci_passthrough_devices\u0027 in resources:"},{"line_number":346,"context_line":"            if not self.pci_tracker:"},{"line_number":347,"context_line":"                ctxt \u003d context.get_admin_context()"},{"line_number":348,"context_line":"                self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":349,"context_line":"                        ctxt, self.compute_node.id)"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_c709e833","line":347,"updated":"2015-01-13 00:30:49.000000000","message":"Not sure if it will be better to simply passing the context, and have the PCI tracer to elevate it?","commit_id":"8580c3e0f7bdcba75dc2f38422e3f07b0cc2eea0"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9def42024b2fe6fceaa071862ecef33bf9d9526e","unresolved":false,"context_lines":[{"line_number":344,"context_line":"    def _update_available_resource(self, context, resources):"},{"line_number":345,"context_line":"        if \u0027pci_passthrough_devices\u0027 in resources:"},{"line_number":346,"context_line":"            if not self.pci_tracker:"},{"line_number":347,"context_line":"                ctxt \u003d context.get_admin_context()"},{"line_number":348,"context_line":"                self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":349,"context_line":"                        ctxt, self.compute_node.id)"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_b1dcd219","line":347,"in_reply_to":"3a961159_c709e833","updated":"2015-01-14 16:35:32.000000000","message":"Yeah, that\u0027s probably better. Done.","commit_id":"8580c3e0f7bdcba75dc2f38422e3f07b0cc2eea0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9951bb5687bf8790f2071de0c0c44a177fe3420d","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    @utils.synchronized(COMPUTE_RESOURCE_SEMAPHORE)"},{"line_number":344,"context_line":"    def _update_available_resource(self, context, resources):"},{"line_number":345,"context_line":"        if \u0027pci_passthrough_devices\u0027 in resources:"},{"line_number":346,"context_line":"            if self.compute_node and not self.pci_tracker:"},{"line_number":347,"context_line":"                self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":348,"context_line":"                        context, self.compute_node[\"id\"])"},{"line_number":349,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_53c38156","line":346,"updated":"2015-01-26 19:31:03.000000000","message":"You need the conditional because self.compute_node is not initialized when RT is starting. IMHO, that just shows us that https://review.openstack.org/#/c/148904/ needs to be on top of your change","commit_id":"8905c3b2ab5a84a2a6bbd05bca6c0be1169e92ad"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"6c190d6516f727a72ef5af11ba754123356d4a86","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    @utils.synchronized(COMPUTE_RESOURCE_SEMAPHORE)"},{"line_number":344,"context_line":"    def _update_available_resource(self, context, resources):"},{"line_number":345,"context_line":"        if \u0027pci_passthrough_devices\u0027 in resources:"},{"line_number":346,"context_line":"            if self.compute_node and not self.pci_tracker:"},{"line_number":347,"context_line":"                self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":348,"context_line":"                        context, self.compute_node[\"id\"])"},{"line_number":349,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_743af599","line":346,"in_reply_to":"1a930d6b_53c38156","updated":"2015-01-27 18:43:42.000000000","message":"It is true that once we can be sure that the compute_node is initialized, we don\u0027t need to check here. But this is an existing bug, and should be fixed independent of the status of that patch.","commit_id":"8905c3b2ab5a84a2a6bbd05bca6c0be1169e92ad"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9951bb5687bf8790f2071de0c0c44a177fe3420d","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                if self.pci_filter.device_assignable(dev):"},{"line_number":357,"context_line":"                    devs.append(dev)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # Grab all instances assigned to this node:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_539aa16e","line":359,"updated":"2015-01-26 19:31:03.000000000","message":"you could remove that conditional if you assume my comment on L346","commit_id":"8905c3b2ab5a84a2a6bbd05bca6c0be1169e92ad"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"482d2b622b9544d3c91b464e922250f38123a1ba","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context, self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # Grab all instances assigned to this node:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_0a965e4c","line":359,"updated":"2015-02-24 14:14:50.000000000","message":"nit: an else statement would make the code more readable","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"193238b1d0230815f74e16ada44aa604204a9b46","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context, self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # Grab all instances assigned to this node:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_140b9c8e","line":359,"in_reply_to":"ba7be1f8_0a965e4c","updated":"2015-02-25 16:43:31.000000000","message":"Yes, we want to call set_hvdevs() if the pci_tracker creation is successful on line 357.","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"1731cbbf40f57f020dff588c260bb4e331bb74de","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context, self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # Grab all instances assigned to this node:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_b2cd87b9","line":359,"in_reply_to":"ba7be1f8_0a965e4c","updated":"2015-02-25 15:12:51.000000000","message":"but it would also change the logic.","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"0af2b7001e8477ee05cd646728db91cafdf9937b","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            if not self.pci_tracker:"},{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context.elevated(), self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_c1885673","line":358,"updated":"2015-02-25 23:19:17.000000000","message":"I just took a look at the existing resource_tracker.py and it doesn\u0027t appear to need an elevated context for the pci_tracker (see pci_tracker.save() call and other such examples in this file -- the context is passed as-is).\n\nWas there something you found in your testing that required elevated context?","commit_id":"c063b68e1a70c26b7b7babb9faddcfd380675d55"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7e6d01bed210b3a79f0db162043e32b9bd43091b","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            if not self.pci_tracker:"},{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context.elevated(), self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_411e260d","line":358,"in_reply_to":"ba7be1f8_c1885673","updated":"2015-02-25 23:26:01.000000000","message":"No, not that I recall. I took some of the original code from another report about this bug, and it must have had it in the PciDevTracker.__init__(). I\u0027ll remove it.","commit_id":"c063b68e1a70c26b7b7babb9faddcfd380675d55"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a5bf776c32b89bada15c89e26b13f1dd8a11449b","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            if not self.pci_tracker:"},{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context, self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_013eeed9","line":358,"updated":"2015-02-25 23:46:13.000000000","message":"This will create a PciDevTracker if there isn\u0027t one already and there is a compute_node defined. The old code didn\u0027t require self.compute_node !\u003d None in order to have a PciDevTracker.\n\nIs self.compute_node always set? Is there not a case where PciDevTracker without a compute_node is valid? Should self.pci_tracker be allowed to be None now?\n\nJust wondering if you need an else: self.pci_tracker \u003d pci_manager.PciDevTracker(context) here.","commit_id":"2ff929aeb891144270e32bfc471e7958ed3f336f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"3f4dd56d26c962db4be5650b4abe7f8d9555dec3","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            if not self.pci_tracker:"},{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context, self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_34a792a8","line":358,"in_reply_to":"ba7be1f8_013eeed9","updated":"2015-02-26 14:38:24.000000000","message":"No, compute_node may not exist yet - that would be done later in the _sync_compute_node method. Paul Murray is working on a change to how compute_node is set: https://review.openstack.org/#/c/148904/\n\nWhen that patch lands, this may need to be re-arranged, but until then, we can\u0027t assume it will be present.","commit_id":"2ff929aeb891144270e32bfc471e7958ed3f336f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ec312d572a8e9906faf03d6e28bba79939513661","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            if not self.pci_tracker:"},{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context, self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_28549cc8","line":358,"in_reply_to":"ba7be1f8_013eeed9","updated":"2015-02-26 13:34:35.000000000","message":"yea, I think this should depend on Paul\u0027s patch https://review.openstack.org/#/c/148904/8\n\nwithout Paul\u0027s patch, when nova-compute startup, \u0027self.compute_node\u0027 can be None.","commit_id":"2ff929aeb891144270e32bfc471e7958ed3f336f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"06b87d7a5b15a004aac630660ae6a413e0bdd781","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            if not self.pci_tracker:"},{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context, self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_f4517a62","line":358,"in_reply_to":"ba7be1f8_28549cc8","updated":"2015-02-26 14:40:50.000000000","message":"Alex: Paul and I have discussed this. Since this is a bug fix, we felt it should be written to the current code base, even if it will have to be fixed later on when the compute_node creation order is changed.","commit_id":"2ff929aeb891144270e32bfc471e7958ed3f336f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a5bf776c32b89bada15c89e26b13f1dd8a11449b","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context, self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # Grab all instances assigned to this node:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_0c5aa529","line":359,"updated":"2015-02-25 23:46:13.000000000","message":"If it is indeed valid to have a PciDevTracker without a node_id, then you won\u0027t have this guard, like the original code.","commit_id":"2ff929aeb891144270e32bfc471e7958ed3f336f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"3f4dd56d26c962db4be5650b4abe7f8d9555dec3","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                if self.compute_node:"},{"line_number":357,"context_line":"                    self.pci_tracker \u003d pci_manager.PciDevTracker("},{"line_number":358,"context_line":"                            context, self.compute_node[\"id\"])"},{"line_number":359,"context_line":"            if self.pci_tracker:"},{"line_number":360,"context_line":"                self.pci_tracker.set_hvdevs(devs)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # Grab all instances assigned to this node:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_b400e266","line":359,"in_reply_to":"ba7be1f8_0c5aa529","updated":"2015-02-26 14:38:24.000000000","message":"OK, I\u0027ll change it to create the PciDevTracker w/o the node ID, since it will get set on line 412 in _sync_compute_node.","commit_id":"2ff929aeb891144270e32bfc471e7958ed3f336f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7290aa8ec997a0702c30c78f9da3aeb45cf3d4cd","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        \"\"\"Create or update the compute node DB record.\"\"\""},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        import trace"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        if not self.compute_node:"},{"line_number":404,"context_line":"            # we need a copy of the ComputeNode record:"},{"line_number":405,"context_line":"            service \u003d self._get_service(context)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_22eb3f79","line":402,"updated":"2015-03-03 01:55:33.000000000","message":"Accidentally added this I assume","commit_id":"704695339f1feefd097fe34013db850b0997de62"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9d26de1f634ac00060aaec2ba64688991bd72da8","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        \"\"\"Create or update the compute node DB record.\"\"\""},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        import trace"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        if not self.compute_node:"},{"line_number":404,"context_line":"            # we need a copy of the ComputeNode record:"},{"line_number":405,"context_line":"            service \u003d self._get_service(context)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_63c0c050","line":402,"in_reply_to":"ba7be1f8_22eb3f79","updated":"2015-03-03 13:38:44.000000000","message":"ugh.","commit_id":"704695339f1feefd097fe34013db850b0997de62"}],"nova/pci/manager.py":[{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"1920b59177dc6c670c11de7f8cf1f2fa9e18a427","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        from database, otherwise, it will create an empty devices list"},{"line_number":49,"context_line":"        and the resource tracker will update the node_id information later."},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        super(PciDevTracker, self).__init__()"},{"line_number":53,"context_line":"        self.stale \u003d {}"},{"line_number":54,"context_line":"        self.node_id \u003d node_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_3a581a57","side":"PARENT","line":51,"updated":"2015-01-12 13:03:03.000000000","message":"unrelated changes","commit_id":"f795f048c9add52d52d2bb2264802bfc28067ccf"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9951bb5687bf8790f2071de0c0c44a177fe3420d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        if node_id:"},{"line_number":56,"context_line":"            ctxt \u003d context.elevated()"},{"line_number":57,"context_line":"            self.pci_devs \u003d list("},{"line_number":58,"context_line":"                objects.PciDeviceList.get_by_compute_node(ctxt, node_id))"},{"line_number":59,"context_line":"        else:"},{"line_number":60,"context_line":"            self.pci_devs \u003d []"},{"line_number":61,"context_line":"        self._initial_instance_usage()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_33bc3506","line":58,"updated":"2015-01-26 19:31:03.000000000","message":"nit (for the review but I think that\u0027s a good opportunity) :That comes to me the fact that if you want, you should take the opportunity to set the context field in the object when doing that like in https://github.com/openstack/nova/blob/51746900bc56598e2f156d27c231b9c728e4d6f3/nova/objects/migration.py (of course in a separate change)","commit_id":"8905c3b2ab5a84a2a6bbd05bca6c0be1169e92ad"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"482d2b622b9544d3c91b464e922250f38123a1ba","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.node_id \u003d node_id"},{"line_number":56,"context_line":"        self.stats \u003d stats.PciDeviceStats()"},{"line_number":57,"context_line":"        if node_id:"},{"line_number":58,"context_line":"            ctxt \u003d context.elevated()"},{"line_number":59,"context_line":"            self.pci_devs \u003d list("},{"line_number":60,"context_line":"                objects.PciDeviceList.get_by_compute_node(ctxt, node_id))"},{"line_number":61,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_ea9d8a5a","line":58,"updated":"2015-02-24 14:14:50.000000000","message":"I don\u0027t see the need of passing a context as an argument if you elevate it here.\nYou only need to call context.get_admin_context() without modifying the class constructor signature IMHO","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"1731cbbf40f57f020dff588c260bb4e331bb74de","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.node_id \u003d node_id"},{"line_number":56,"context_line":"        self.stats \u003d stats.PciDeviceStats()"},{"line_number":57,"context_line":"        if node_id:"},{"line_number":58,"context_line":"            ctxt \u003d context.elevated()"},{"line_number":59,"context_line":"            self.pci_devs \u003d list("},{"line_number":60,"context_line":"                objects.PciDeviceList.get_by_compute_node(ctxt, node_id))"},{"line_number":61,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_52d52b1a","line":58,"in_reply_to":"ba7be1f8_ea9d8a5a","updated":"2015-02-25 15:12:51.000000000","message":"+","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"193238b1d0230815f74e16ada44aa604204a9b46","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.node_id \u003d node_id"},{"line_number":56,"context_line":"        self.stats \u003d stats.PciDeviceStats()"},{"line_number":57,"context_line":"        if node_id:"},{"line_number":58,"context_line":"            ctxt \u003d context.elevated()"},{"line_number":59,"context_line":"            self.pci_devs \u003d list("},{"line_number":60,"context_line":"                objects.PciDeviceList.get_by_compute_node(ctxt, node_id))"},{"line_number":61,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_14ce3c2e","line":58,"in_reply_to":"ba7be1f8_ea9d8a5a","updated":"2015-02-25 16:43:31.000000000","message":"That is not the pattern throughout the nova codebase. Context is passed in, and if an admin context is needed, elevated() is called. There are 7 cases of this pattern in resource_tracker.py alone.","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fcb7209e1b4fdf2a95424ca5a036b16fd8cd943d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.node_id \u003d node_id"},{"line_number":56,"context_line":"        self.stats \u003d stats.PciDeviceStats()"},{"line_number":57,"context_line":"        if node_id:"},{"line_number":58,"context_line":"            ctxt \u003d context.elevated()"},{"line_number":59,"context_line":"            self.pci_devs \u003d list("},{"line_number":60,"context_line":"                objects.PciDeviceList.get_by_compute_node(ctxt, node_id))"},{"line_number":61,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_9dc88c56","line":58,"updated":"2015-02-25 18:48:33.000000000","message":"Sorry I missed commenting on this earlier. Why do you want to do this? Shouldn\u0027t the person (resource tracker) using the PciDevTracker pass in the context it wants to use (and not elevate it here)?","commit_id":"6a2031a37a48ea615261c5e11731a3131253eda3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"1545e929d9c3ce060204892cab16433e0e7a4aec","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.node_id \u003d node_id"},{"line_number":56,"context_line":"        self.stats \u003d stats.PciDeviceStats()"},{"line_number":57,"context_line":"        if node_id:"},{"line_number":58,"context_line":"            ctxt \u003d context.elevated()"},{"line_number":59,"context_line":"            self.pci_devs \u003d list("},{"line_number":60,"context_line":"                objects.PciDeviceList.get_by_compute_node(ctxt, node_id))"},{"line_number":61,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_06b364e9","line":58,"in_reply_to":"ba7be1f8_9dc88c56","updated":"2015-02-25 23:01:41.000000000","message":"Done","commit_id":"6a2031a37a48ea615261c5e11731a3131253eda3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ab33414fa43b3ebd21f3f52469b52972f57c4e3f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.stats \u003d stats.PciDeviceStats()"},{"line_number":57,"context_line":"        if node_id:"},{"line_number":58,"context_line":"            self.pci_devs \u003d list("},{"line_number":59,"context_line":"                objects.PciDeviceList.get_by_compute_node(context, node_id))"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            self.pci_devs \u003d []"},{"line_number":62,"context_line":"        self._initial_instance_usage()"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_ff62f514","line":59,"updated":"2015-02-27 17:36:06.000000000","message":"as it was this call which wasn\u0027t covered by the unittests (or it would have been failing...), could you please add one to make sure we won\u0027t regress ?","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ff2dd2eef216c0295e856e0b931b0c08ec25a766","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.stats \u003d stats.PciDeviceStats()"},{"line_number":57,"context_line":"        if node_id:"},{"line_number":58,"context_line":"            self.pci_devs \u003d list("},{"line_number":59,"context_line":"                objects.PciDeviceList.get_by_compute_node(context, node_id))"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            self.pci_devs \u003d []"},{"line_number":62,"context_line":"        self._initial_instance_usage()"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_20e709e6","line":59,"in_reply_to":"ba7be1f8_ff62f514","updated":"2015-02-27 19:44:48.000000000","message":"+1 on this","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d50996ca1fb075bc8c54e8508108943e5ff2f4ae","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.stats \u003d stats.PciDeviceStats()"},{"line_number":57,"context_line":"        if node_id:"},{"line_number":58,"context_line":"            self.pci_devs \u003d list("},{"line_number":59,"context_line":"                objects.PciDeviceList.get_by_compute_node(context, node_id))"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            self.pci_devs \u003d []"},{"line_number":62,"context_line":"        self._initial_instance_usage()"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_3f21984d","line":59,"in_reply_to":"ba7be1f8_ff62f514","updated":"2015-03-02 23:11:09.000000000","message":"Good idea.","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"}],"nova/tests/unit/compute/test_resource_tracker.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cdcd01529d6f1bdcca153c99598b6806a14397bc","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self.compute \u003d self._create_compute_node()"},{"line_number":237,"context_line":"        self.updated \u003d False"},{"line_number":238,"context_line":"        self.deleted \u003d False"},{"line_number":239,"context_line":"        self.update_call_count \u003d 0"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _create_compute_node(self, values\u003dNone):"},{"line_number":242,"context_line":"        compute \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_6969be24","line":239,"updated":"2015-02-23 23:30:48.000000000","message":"I don\u0027t like these member variables for asserting called and counting calls (all this is built into mocks) but I see that\u0027s already existing and you\u0027re simply resetting them on setUp().","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"193238b1d0230815f74e16ada44aa604204a9b46","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self.compute \u003d self._create_compute_node()"},{"line_number":237,"context_line":"        self.updated \u003d False"},{"line_number":238,"context_line":"        self.deleted \u003d False"},{"line_number":239,"context_line":"        self.update_call_count \u003d 0"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _create_compute_node(self, values\u003dNone):"},{"line_number":242,"context_line":"        compute \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_c6523e34","line":239,"in_reply_to":"ba7be1f8_4adcd612","updated":"2015-02-25 16:43:31.000000000","message":"Yeah, I was torn on this. I\u0027ve gotten dinged for cleaning up code that isn\u0027t directly related to the bug, so I worked with the existing code. Agreed that it\u0027s poor, but it should be fixed in a different patchset.","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"482d2b622b9544d3c91b464e922250f38123a1ba","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self.compute \u003d self._create_compute_node()"},{"line_number":237,"context_line":"        self.updated \u003d False"},{"line_number":238,"context_line":"        self.deleted \u003d False"},{"line_number":239,"context_line":"        self.update_call_count \u003d 0"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _create_compute_node(self, values\u003dNone):"},{"line_number":242,"context_line":"        compute \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_4adcd612","line":239,"in_reply_to":"ba7be1f8_6969be24","updated":"2015-02-24 14:14:50.000000000","message":"+1 with melanie, you should check the call counts only when needed","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cdcd01529d6f1bdcca153c99598b6806a14397bc","unresolved":false,"context_lines":[{"line_number":523,"context_line":"    def setUp(self, mock_ccn):"},{"line_number":524,"context_line":"        # We need to mock out the _create_compute_node method to simulate a"},{"line_number":525,"context_line":"        # missing service."},{"line_number":526,"context_line":"        mock_ccn.return_value \u003d None"},{"line_number":527,"context_line":"        super(MissingServiceTestCase, self).setUp()"},{"line_number":528,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":529,"context_line":"        self.tracker \u003d self._tracker()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_e9676e23","line":526,"updated":"2015-02-23 23:30:48.000000000","message":"I think instead of mocking this, you could simply set self.compute \u003d None after calling super(MissingServiceTestCase, self).setUp(). (Like the self.context and self.tracker already doing the same.)","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"193238b1d0230815f74e16ada44aa604204a9b46","unresolved":false,"context_lines":[{"line_number":523,"context_line":"    def setUp(self, mock_ccn):"},{"line_number":524,"context_line":"        # We need to mock out the _create_compute_node method to simulate a"},{"line_number":525,"context_line":"        # missing service."},{"line_number":526,"context_line":"        mock_ccn.return_value \u003d None"},{"line_number":527,"context_line":"        super(MissingServiceTestCase, self).setUp()"},{"line_number":528,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":529,"context_line":"        self.tracker \u003d self._tracker()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_49a821db","line":526,"in_reply_to":"ba7be1f8_e9676e23","updated":"2015-02-25 16:43:31.000000000","message":"Done","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"482d2b622b9544d3c91b464e922250f38123a1ba","unresolved":false,"context_lines":[{"line_number":523,"context_line":"    def setUp(self, mock_ccn):"},{"line_number":524,"context_line":"        # We need to mock out the _create_compute_node method to simulate a"},{"line_number":525,"context_line":"        # missing service."},{"line_number":526,"context_line":"        mock_ccn.return_value \u003d None"},{"line_number":527,"context_line":"        super(MissingServiceTestCase, self).setUp()"},{"line_number":528,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":529,"context_line":"        self.tracker \u003d self._tracker()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_477be827","line":526,"in_reply_to":"ba7be1f8_e9676e23","updated":"2015-02-24 14:14:50.000000000","message":"Please don\u0027t mock up in the setUp method, but rather for each test, that\u0027s a pattern we\u0027re trying to provide for each testcase (ie. remove the most from setUp and do what\u0027s needed in the methods directly)","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cdcd01529d6f1bdcca153c99598b6806a14397bc","unresolved":false,"context_lines":[{"line_number":540,"context_line":"    def setUp(self, mock_ccn):"},{"line_number":541,"context_line":"        # We need to mock out the _create_compute_node method to simulate a"},{"line_number":542,"context_line":"        # missing value for the compute_node."},{"line_number":543,"context_line":"        mock_ccn.return_value \u003d None"},{"line_number":544,"context_line":"        super(MissingComputeNodeTestCase, self).setUp()"},{"line_number":545,"context_line":"        self.tracker \u003d self._tracker()"},{"line_number":546,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_297266e5","line":543,"updated":"2015-02-23 23:30:48.000000000","message":"Same comment as above","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"193238b1d0230815f74e16ada44aa604204a9b46","unresolved":false,"context_lines":[{"line_number":540,"context_line":"    def setUp(self, mock_ccn):"},{"line_number":541,"context_line":"        # We need to mock out the _create_compute_node method to simulate a"},{"line_number":542,"context_line":"        # missing value for the compute_node."},{"line_number":543,"context_line":"        mock_ccn.return_value \u003d None"},{"line_number":544,"context_line":"        super(MissingComputeNodeTestCase, self).setUp()"},{"line_number":545,"context_line":"        self.tracker \u003d self._tracker()"},{"line_number":546,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_49d4a1bc","line":543,"in_reply_to":"ba7be1f8_297266e5","updated":"2015-02-25 16:43:31.000000000","message":"Done","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ff2dd2eef216c0295e856e0b931b0c08ec25a766","unresolved":false,"context_lines":[{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def test_missing_service(self):"},{"line_number":527,"context_line":"        self.tracker.driver.get_available_resource \u003d mock.Mock("},{"line_number":528,"context_line":"                return_value\u003dNone)"},{"line_number":529,"context_line":"        self.tracker.update_available_resource(self.context)"},{"line_number":530,"context_line":"        self.assertTrue(self.tracker.disabled)"},{"line_number":531,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_3d11f2ac","line":528,"updated":"2015-02-27 19:44:48.000000000","message":"Is this needed because you added tracker.compute_node in BaseTestCase?","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d50996ca1fb075bc8c54e8508108943e5ff2f4ae","unresolved":false,"context_lines":[{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    def test_missing_service(self):"},{"line_number":527,"context_line":"        self.tracker.driver.get_available_resource \u003d mock.Mock("},{"line_number":528,"context_line":"                return_value\u003dNone)"},{"line_number":529,"context_line":"        self.tracker.update_available_resource(self.context)"},{"line_number":530,"context_line":"        self.assertTrue(self.tracker.disabled)"},{"line_number":531,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_9feb64db","line":528,"in_reply_to":"ba7be1f8_3d11f2ac","updated":"2015-03-02 23:11:09.000000000","message":"Yes, but now that I\u0027m looking more closely, the class is about a missing *service*, so I\u0027ll re-do so that it is the _get_service() method that returns None.","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"}],"nova/tests/unit/pci/test_manager.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"482d2b622b9544d3c91b464e922250f38123a1ba","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    {\u0027count\u0027: 1,"},{"line_number":78,"context_line":"     \u0027spec\u0027: [{\u0027vendor_id\u0027: \u0027v1\u0027}]}]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"fake_context \u003d context.get_admin_context()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class PciDevTrackerTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_c796f83e","line":80,"updated":"2015-02-24 14:14:50.000000000","message":"if you\u0027re approving my comment on the context, you don\u0027t need this which is quite ugly IMHO...","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"193238b1d0230815f74e16ada44aa604204a9b46","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    {\u0027count\u0027: 1,"},{"line_number":78,"context_line":"     \u0027spec\u0027: [{\u0027vendor_id\u0027: \u0027v1\u0027}]}]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"fake_context \u003d context.get_admin_context()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class PciDevTrackerTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_5470b4db","line":80,"in_reply_to":"ba7be1f8_c796f83e","updated":"2015-02-25 16:43:31.000000000","message":"I don\u0027t agree with the context comment, as it is a standard pattern in nova. As for ugly, it existed 3 times already in this file alone, and I think it\u0027s cleaner to have a single place where it is defined.","commit_id":"e68aefb155be7185b01f27029644776379918e51"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fcb7209e1b4fdf2a95424ca5a036b16fd8cd943d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    {\u0027count\u0027: 1,"},{"line_number":78,"context_line":"     \u0027spec\u0027: [{\u0027vendor_id\u0027: \u0027v1\u0027}]}]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"fake_context \u003d context.get_admin_context()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class PciDevTrackerTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_3d5a4083","line":80,"updated":"2015-02-25 18:48:33.000000000","message":"I guess the usual way I\u0027ve seen it in tests is to make a self.context in setUp() so it\u0027s not a global to everything. I\u0027m not sure how much it matters though.","commit_id":"6a2031a37a48ea615261c5e11731a3131253eda3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"1545e929d9c3ce060204892cab16433e0e7a4aec","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    {\u0027count\u0027: 1,"},{"line_number":78,"context_line":"     \u0027spec\u0027: [{\u0027vendor_id\u0027: \u0027v1\u0027}]}]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"fake_context \u003d context.get_admin_context()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class PciDevTrackerTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_66ac208d","line":80,"in_reply_to":"ba7be1f8_3d5a4083","updated":"2015-02-25 23:01:41.000000000","message":"That\u0027s where I would normally do it, too. But considering that there are 8 other fake_* values defined above this, I thought it would be consistent. I\u0027ll move it to setUp().","commit_id":"6a2031a37a48ea615261c5e11731a3131253eda3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ff2dd2eef216c0295e856e0b931b0c08ec25a766","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 0)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_pcidev_tracker_create_no_context(self):"},{"line_number":135,"context_line":"            self.assertRaises(TypeError, manager.PciDevTracker)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_set_hvdev_new_dev(self):"},{"line_number":138,"context_line":"        fake_pci_3 \u003d dict(fake_pci, address\u003d\u00270000:00:00.4\u0027, vendor_id\u003d\u0027v2\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_5e640a49","line":135,"updated":"2015-02-27 19:44:48.000000000","message":"This got indented weirdly","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ab33414fa43b3ebd21f3f52469b52972f57c4e3f","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 0)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_pcidev_tracker_create_no_context(self):"},{"line_number":135,"context_line":"            self.assertRaises(TypeError, manager.PciDevTracker)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_set_hvdev_new_dev(self):"},{"line_number":138,"context_line":"        fake_pci_3 \u003d dict(fake_pci, address\u003d\u00270000:00:00.4\u0027, vendor_id\u003d\u0027v2\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_ea25d5ae","line":135,"updated":"2015-02-27 17:36:06.000000000","message":"Well, that\u0027s implicit, as the context is a mandatory argument. I would rather cover the \"if node_id\" case by asserting that if instanciating the PCIManager with node_id optional attribute, it calls the object. Here that\u0027s what was missing...","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d50996ca1fb075bc8c54e8508108943e5ff2f4ae","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 0)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_pcidev_tracker_create_no_context(self):"},{"line_number":135,"context_line":"            self.assertRaises(TypeError, manager.PciDevTracker)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_set_hvdev_new_dev(self):"},{"line_number":138,"context_line":"        fake_pci_3 \u003d dict(fake_pci, address\u003d\u00270000:00:00.4\u0027, vendor_id\u003d\u0027v2\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_7f4b10b1","line":135,"in_reply_to":"ba7be1f8_60f7418d","updated":"2015-03-02 23:11:09.000000000","message":"melwitt: agreed that the method of passing args to assertRaises can by cryptic. Dunno what happened to the indentation.","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ff2dd2eef216c0295e856e0b931b0c08ec25a766","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 0)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_pcidev_tracker_create_no_context(self):"},{"line_number":135,"context_line":"            self.assertRaises(TypeError, manager.PciDevTracker)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_set_hvdev_new_dev(self):"},{"line_number":138,"context_line":"        fake_pci_3 \u003d dict(fake_pci, address\u003d\u00270000:00:00.4\u0027, vendor_id\u003d\u0027v2\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_60f7418d","line":135,"in_reply_to":"ba7be1f8_ea25d5ae","updated":"2015-02-27 19:44:48.000000000","message":"Agreed, it took me a few to get how this was testing it.","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d50996ca1fb075bc8c54e8508108943e5ff2f4ae","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 0)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_pcidev_tracker_create_no_context(self):"},{"line_number":135,"context_line":"            self.assertRaises(TypeError, manager.PciDevTracker)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_set_hvdev_new_dev(self):"},{"line_number":138,"context_line":"        fake_pci_3 \u003d dict(fake_pci, address\u003d\u00270000:00:00.4\u0027, vendor_id\u003d\u0027v2\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_5fae4c2f","line":135,"in_reply_to":"ba7be1f8_ea25d5ae","updated":"2015-03-02 23:11:09.000000000","message":"bauzas: ok, I\u0027ve revamped the tests to check the object call.","commit_id":"99d50476f0cb9d9a848a8a8af54d0bd3b45f0502"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7290aa8ec997a0702c30c78f9da3aeb45cf3d4cd","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    def test_pcidev_tracker_create_no_nodeid(self, mock_get_cn):"},{"line_number":133,"context_line":"        self.tracker \u003d manager.PciDevTracker(self.fake_context)"},{"line_number":134,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 0)"},{"line_number":135,"context_line":"        self.assertEqual(mock_get_cn.call_count, 0)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @mock.patch.object(nova.objects.PciDeviceList, \u0027get_by_compute_node\u0027)"},{"line_number":138,"context_line":"    def test_pcidev_tracker_create_with_nodeid(self, mock_get_cn):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_a9455244","line":135,"updated":"2015-03-03 01:55:33.000000000","message":"Don\u0027t need to change it but fyi it\u0027s more to the point to say self.assertFalse(mock_get_cn.called)","commit_id":"704695339f1feefd097fe34013db850b0997de62"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9d26de1f634ac00060aaec2ba64688991bd72da8","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    def test_pcidev_tracker_create_no_nodeid(self, mock_get_cn):"},{"line_number":133,"context_line":"        self.tracker \u003d manager.PciDevTracker(self.fake_context)"},{"line_number":134,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 0)"},{"line_number":135,"context_line":"        self.assertEqual(mock_get_cn.call_count, 0)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @mock.patch.object(nova.objects.PciDeviceList, \u0027get_by_compute_node\u0027)"},{"line_number":138,"context_line":"    def test_pcidev_tracker_create_with_nodeid(self, mock_get_cn):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_a3b2b8e2","line":135,"in_reply_to":"ba7be1f8_a9455244","updated":"2015-03-03 13:38:44.000000000","message":"I wrote it that way","commit_id":"704695339f1feefd097fe34013db850b0997de62"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"9d26de1f634ac00060aaec2ba64688991bd72da8","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    def test_pcidev_tracker_create_no_nodeid(self, mock_get_cn):"},{"line_number":133,"context_line":"        self.tracker \u003d manager.PciDevTracker(self.fake_context)"},{"line_number":134,"context_line":"        self.assertEqual(len(self.tracker.pci_devs), 0)"},{"line_number":135,"context_line":"        self.assertEqual(mock_get_cn.call_count, 0)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @mock.patch.object(nova.objects.PciDeviceList, \u0027get_by_compute_node\u0027)"},{"line_number":138,"context_line":"    def test_pcidev_tracker_create_with_nodeid(self, mock_get_cn):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_c33fac23","line":135,"in_reply_to":"ba7be1f8_a9455244","updated":"2015-03-03 13:38:44.000000000","message":"Understood. I had originally written the test below it with call_count \u003d 1, and had this as call_count \u003d 0 for contrast.","commit_id":"704695339f1feefd097fe34013db850b0997de62"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f662c3614c5ad7ddbf26cf4440b031dbaa194c5f","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        mock_get_cn.assert_called_once_with(self.fake_context, 1)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_pcidev_tracker_create_node_but_no_context(self):"},{"line_number":143,"context_line":"        self.assertRaises(TypeError, manager.PciDevTracker, node_id\u003d1)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test_set_hvdev_new_dev(self):"},{"line_number":146,"context_line":"        fake_pci_3 \u003d dict(fake_pci, address\u003d\u00270000:00:00.4\u0027, vendor_id\u003d\u0027v2\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_f8d946f5","line":143,"updated":"2015-03-10 23:11:06.000000000","message":"Well, the L138 unittest is sufficient IMHO, you don\u0027t need to add this L142 unittest too, because the context arg is mandatory (no default value)","commit_id":"6cdef8a99d6bb3c9347b5160f5afde6cf46b0620"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"189d7240dea3c2e3e3fc81ba406ac0ca30aeef4d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        mock_get_cn.assert_called_once_with(self.fake_context, 1)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_pcidev_tracker_create_node_but_no_context(self):"},{"line_number":143,"context_line":"        self.assertRaises(TypeError, manager.PciDevTracker, node_id\u003d1)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test_set_hvdev_new_dev(self):"},{"line_number":146,"context_line":"        fake_pci_3 \u003d dict(fake_pci, address\u003d\u00270000:00:00.4\u0027, vendor_id\u003d\u0027v2\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_75ec582a","line":143,"in_reply_to":"9a80dd14_f8d946f5","updated":"2015-03-11 18:26:58.000000000","message":"Done","commit_id":"6cdef8a99d6bb3c9347b5160f5afde6cf46b0620"}]}
