)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4c58cb3991e100277f0d8bda6e3c655479a2e6a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"91cc7ac0_e7924b12","updated":"2026-10-26 10:06:42.000000000","message":"I have a question","commit_id":"26700bdde4b1ab2f4b91f1cda16c006832744c2b"}],"nova/tests/fixtures/neutron.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4c58cb3991e100277f0d8bda6e3c655479a2e6a5","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    Port and binding API operations share a lock so readers can deep-copy a"},{"line_number":68,"context_line":"    consistent snapshot while compute and API threads update the fixture."},{"line_number":69,"context_line":"    The lock is shared across fixtures as some tests share their port state."},{"line_number":70,"context_line":"    \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # the default project_id in OsaAPIFixtures"}],"source_content_type":"text/x-python","patch_set":1,"id":"ad36f054_78ad34b0","line":69,"updated":"2026-10-26 10:06:42.000000000","message":"I don\u0027t see what the way of that share. What is the global state that is shared across fixture instances in different test cases?","commit_id":"26700bdde4b1ab2f4b91f1cda16c006832744c2b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9bc18f87bd510c966bbbae6e51592d240bd633fc","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    Port and binding API operations share a lock so readers can deep-copy a"},{"line_number":68,"context_line":"    consistent snapshot while compute and API threads update the fixture."},{"line_number":69,"context_line":"    The lock is shared across fixtures as some tests share their port state."},{"line_number":70,"context_line":"    \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    # the default project_id in OsaAPIFixtures"}],"source_content_type":"text/x-python","patch_set":1,"id":"d43b7f5d_3b7ea70d","line":69,"in_reply_to":"ad36f054_78ad34b0","updated":"2026-10-27 11:36:56.000000000","message":"Its not shearing between test-cases its within that is the problem\ni guess your comemting on `The lock is shared across fixtures as some tests share their port state.`\n\nbut that was ment to be more like\n\n`The lock is shared across fixtures as some tests share their port state across threads`\n\n\ni.e. not between thest btu that soem test have mutabel state taht is shared across thread within the test.\n\nif that makes it slare or you have better wordign i can update it","commit_id":"26700bdde4b1ab2f4b91f1cda16c006832744c2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4c58cb3991e100277f0d8bda6e3c655479a2e6a5","unresolved":true,"context_lines":[{"line_number":648,"context_line":"        # TODO(stephenfin): This should probably happen in setUp"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"        # The fixture allows port update so we need to deepcopy the class"},{"line_number":651,"context_line":"        # variables to avoid test case interference."},{"line_number":652,"context_line":"        self._ports \u003d {"},{"line_number":653,"context_line":"            # NOTE(gibi)The port_with_sriov_resource_request cannot be added"},{"line_number":654,"context_line":"            # globally in this fixture as it adds a second network that makes"}],"source_content_type":"text/x-python","patch_set":1,"id":"eeebe256_7a33e170","line":651,"updated":"2026-10-26 10:06:42.000000000","message":"here we want to make the fixture independent from each other.","commit_id":"26700bdde4b1ab2f4b91f1cda16c006832744c2b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9bc18f87bd510c966bbbae6e51592d240bd633fc","unresolved":true,"context_lines":[{"line_number":648,"context_line":"        # TODO(stephenfin): This should probably happen in setUp"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"        # The fixture allows port update so we need to deepcopy the class"},{"line_number":651,"context_line":"        # variables to avoid test case interference."},{"line_number":652,"context_line":"        self._ports \u003d {"},{"line_number":653,"context_line":"            # NOTE(gibi)The port_with_sriov_resource_request cannot be added"},{"line_number":654,"context_line":"            # globally in this fixture as it adds a second network that makes"}],"source_content_type":"text/x-python","patch_set":1,"id":"825da41a_f7cd1b42","line":651,"in_reply_to":"eeebe256_7a33e170","updated":"2026-10-27 11:36:56.000000000","message":"correct","commit_id":"26700bdde4b1ab2f4b91f1cda16c006832744c2b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4c58cb3991e100277f0d8bda6e3c655479a2e6a5","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"        self._port_bindings[port_id][binding[\u0027host\u0027]] \u003d binding"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        return {\u0027binding\u0027: copy.deepcopy(binding)}"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"    def _validate_port_binding(self, port_id, host_id):"},{"line_number":730,"context_line":"        if port_id not in self._ports:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f1f3c33_faad9350","line":727,"updated":"2026-10-26 10:06:42.000000000","message":"OK that disconnects the stored binding from the returned binding.","commit_id":"26700bdde4b1ab2f4b91f1cda16c006832744c2b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9bc18f87bd510c966bbbae6e51592d240bd633fc","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"        self._port_bindings[port_id][binding[\u0027host\u0027]] \u003d binding"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        return {\u0027binding\u0027: copy.deepcopy(binding)}"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"    def _validate_port_binding(self, port_id, host_id):"},{"line_number":730,"context_line":"        if port_id not in self._ports:"}],"source_content_type":"text/x-python","patch_set":1,"id":"2ecaacad_d0df26ab","line":727,"in_reply_to":"9f1f3c33_faad9350","updated":"2026-10-27 11:36:56.000000000","message":"yes keeping it a snapshot so that async mutations dont impact the responce in a way that woudl nto happen in reality.","commit_id":"26700bdde4b1ab2f4b91f1cda16c006832744c2b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ab77c4cef08034e77c8fb1337aefe96cf9b3b8bb","unresolved":true,"context_lines":[{"line_number":862,"context_line":""},{"line_number":863,"context_line":"        return {\u0027ports\u0027: ports}"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    def show_network(self, network_id, **_params):"},{"line_number":866,"context_line":"        if network_id not in self._networks:"},{"line_number":867,"context_line":"            raise neutron_client_exc.NetworkNotFoundClient()"},{"line_number":868,"context_line":"        return {\u0027network\u0027: copy.deepcopy(self._networks[network_id])}"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"    def list_networks(self, retrieve_all\u003dTrue, **_params):"},{"line_number":871,"context_line":"        return {"},{"line_number":872,"context_line":"            \u0027networks\u0027: self._list_resource("},{"line_number":873,"context_line":"                self._networks, retrieve_all, **_params,"},{"line_number":874,"context_line":"            ),"},{"line_number":875,"context_line":"        }"},{"line_number":876,"context_line":""},{"line_number":877,"context_line":"    def show_subnet(self, subnet_id, **_params):"},{"line_number":878,"context_line":"        if subnet_id not in self._subnets:"},{"line_number":879,"context_line":"            raise neutron_client_exc.NeutronClientException()"},{"line_number":880,"context_line":"        return {\u0027subnet\u0027: copy.deepcopy(self._subnets[subnet_id])}"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"    def list_subnets(self, retrieve_all\u003dTrue, **_params):"},{"line_number":883,"context_line":"        # NOTE(gibi): The fixture does not support filtering for subnets"},{"line_number":884,"context_line":"        return {\u0027subnets\u0027: copy.deepcopy(list(self._subnets.values()))}"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"    def list_floatingips(self, retrieve_all\u003dTrue, **_params):"},{"line_number":887,"context_line":"        return {\u0027floatingips\u0027: []}"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"    def list_security_groups(self, retrieve_all\u003dTrue, **_params):"},{"line_number":890,"context_line":"        return {"},{"line_number":891,"context_line":"            \u0027security_groups\u0027: self._list_resource("},{"line_number":892,"context_line":"                self._security_groups, retrieve_all, **_params,"},{"line_number":893,"context_line":"            ),"},{"line_number":894,"context_line":"        }"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"    @utils.synchronized(\u0027neutron-fixture\u0027)"},{"line_number":897,"context_line":"    def create_port(self, body\u003dNone):"},{"line_number":898,"context_line":"        body \u003d body or {\u0027port\u0027: {}}"}],"source_content_type":"text/x-python","patch_set":1,"id":"b6f4c793_e250c828","line":895,"range":{"start_line":865,"start_character":3,"end_line":895,"end_character":0},"updated":"2026-10-20 18:53:31.000000000","message":"i wonder if the same issue could happen for networks subnets or security groups?\n\nwe dont have any dediccated fixture to mutate these so in princpial no these are staitc for the lifetime fo the fixture which is why i didnt annoatet them but that does not nessiarly mean we dont have tests that do.\n\nfor now i think its fine not to annotate them just noting that this was something i was debating when reviewing it locally.","commit_id":"26700bdde4b1ab2f4b91f1cda16c006832744c2b"}]}
