)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ac77205bf8e750b72e8b9fdd86edfd14f1653a8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"7a2c1d80_4d4b6ca0","updated":"2026-02-09 09:26:06.000000000","message":"Tested in https://review.opendev.org/c/openstack/neutron/+/973580","commit_id":"cc818728175ec367826afb99a91c919890b2bbca"}],"ovsdbapp/venv.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4d139770b36f6636a37b2fd60c9a7a7aef748c24","unresolved":true,"context_lines":[{"line_number":27,"context_line":"DUMMY_OVERRIDE_NONE \u003d \u0027\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def get_pid(filename):"},{"line_number":31,"context_line":"    with open(filename) as f:"},{"line_number":32,"context_line":"        return int(f.read().strip())"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def kill_pid(pidfile):"},{"line_number":36,"context_line":"    try:"},{"line_number":37,"context_line":"        os.kill(get_pid(pidfile), signal.SIGTERM)"},{"line_number":38,"context_line":"    except (FileNotFoundError, ProcessLookupError):"},{"line_number":39,"context_line":"        pass  # Process already stopped or pidfile doesn\u0027t exist"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class VenvFixture(fixtures.Fixture):"}],"source_content_type":"text/x-python","patch_set":2,"id":"8cf143fc_86a11c66","line":39,"range":{"start_line":30,"start_character":0,"end_line":39,"end_character":64},"updated":"2026-01-29 19:21:19.000000000","message":"We can delete these now.","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"61e87f28381189bdf69b6bb3f5764d1bec6942e1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"DUMMY_OVERRIDE_NONE \u003d \u0027\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def get_pid(filename):"},{"line_number":31,"context_line":"    with open(filename) as f:"},{"line_number":32,"context_line":"        return int(f.read().strip())"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def kill_pid(pidfile):"},{"line_number":36,"context_line":"    try:"},{"line_number":37,"context_line":"        os.kill(get_pid(pidfile), signal.SIGTERM)"},{"line_number":38,"context_line":"    except (FileNotFoundError, ProcessLookupError):"},{"line_number":39,"context_line":"        pass  # Process already stopped or pidfile doesn\u0027t exist"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class VenvFixture(fixtures.Fixture):"}],"source_content_type":"text/x-python","patch_set":2,"id":"d8e4276b_4c644dcf","line":39,"range":{"start_line":30,"start_character":0,"end_line":39,"end_character":64},"in_reply_to":"8cf143fc_86a11c66","updated":"2026-01-29 19:38:30.000000000","message":"Done","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4d139770b36f6636a37b2fd60c9a7a7aef748c24","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        super().__init__()"},{"line_number":46,"context_line":"        self.venvdir \u003d venvdir or tempfile.mkdtemp()"},{"line_number":47,"context_line":"        self.env \u003d {"},{"line_number":48,"context_line":"            \"OVS_RUNDIR\": self.venvdir,"},{"line_number":49,"context_line":"            \"OVS_LOGDIR\": self.venvdir,"},{"line_number":50,"context_line":"            \"OVS_DBDIR\": self.venvdir,"},{"line_number":51,"context_line":"            \"OVS_SYSCONFDIR\": self.venvdir,"},{"line_number":52,"context_line":"            \"PATH\": \"\"}"},{"line_number":53,"context_line":"        self.remove \u003d remove"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"71b16f33_f1a5b0b9","line":51,"range":{"start_line":48,"start_character":0,"end_line":51,"end_character":43},"updated":"2026-01-29 19:21:19.000000000","message":"I\u0027d set these in the OvsFixture since this is a generic Venv class handling mostly the directories. If I ever inherit this to my own fixture for my Foo environment all `call()` calls are gonna get these envvars","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"55babda11b7ce537815202427acff9b4709ceed9","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        super().__init__()"},{"line_number":46,"context_line":"        self.venvdir \u003d venvdir or tempfile.mkdtemp()"},{"line_number":47,"context_line":"        self.env \u003d {"},{"line_number":48,"context_line":"            \"OVS_RUNDIR\": self.venvdir,"},{"line_number":49,"context_line":"            \"OVS_LOGDIR\": self.venvdir,"},{"line_number":50,"context_line":"            \"OVS_DBDIR\": self.venvdir,"},{"line_number":51,"context_line":"            \"OVS_SYSCONFDIR\": self.venvdir,"},{"line_number":52,"context_line":"            \"PATH\": \"\"}"},{"line_number":53,"context_line":"        self.remove \u003d remove"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9426c2e4_74c06a24","line":51,"range":{"start_line":48,"start_character":0,"end_line":51,"end_character":43},"in_reply_to":"0b5e4310_cb7b4f21","updated":"2026-02-04 19:46:20.000000000","message":"Looking at the code, I think even the ProcessFixtures rely on these. ovsdb-server, ovs-vswitchd, ovn-controller etc. binaries all access OVS_RUNDIR. And this VenvFixture is specifically an OVS virtualenv creator (maybe the naming should reflect that). Currently one could not use the built-in OvsVenvFixture and just start up an ovsdb-server fixture etc. without having to modify anything.\n\nBasically, this is modeled after the ovs-sandbox and every sandbox gets these env variables. I agree that it feels like these should fit better under OvsVenvFixture, but figuring out whether that is actually true and testing it doesn\u0027t break anything might be more work than I\u0027m actually willing to do on it right now.","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0cefc964e9f04a2b9654ea36d18d39267c631a18","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        super().__init__()"},{"line_number":46,"context_line":"        self.venvdir \u003d venvdir or tempfile.mkdtemp()"},{"line_number":47,"context_line":"        self.env \u003d {"},{"line_number":48,"context_line":"            \"OVS_RUNDIR\": self.venvdir,"},{"line_number":49,"context_line":"            \"OVS_LOGDIR\": self.venvdir,"},{"line_number":50,"context_line":"            \"OVS_DBDIR\": self.venvdir,"},{"line_number":51,"context_line":"            \"OVS_SYSCONFDIR\": self.venvdir,"},{"line_number":52,"context_line":"            \"PATH\": \"\"}"},{"line_number":53,"context_line":"        self.remove \u003d remove"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df2868f5_3c01bdf7","line":51,"range":{"start_line":48,"start_character":0,"end_line":51,"end_character":43},"in_reply_to":"4958163d_e78243ba","updated":"2026-01-29 21:48:04.000000000","message":"I think it would make sense to have an env variables in venv since they are tied to the virtual environment. Just that this is a generic class and the specific class should define these.","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"61e87f28381189bdf69b6bb3f5764d1bec6942e1","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        super().__init__()"},{"line_number":46,"context_line":"        self.venvdir \u003d venvdir or tempfile.mkdtemp()"},{"line_number":47,"context_line":"        self.env \u003d {"},{"line_number":48,"context_line":"            \"OVS_RUNDIR\": self.venvdir,"},{"line_number":49,"context_line":"            \"OVS_LOGDIR\": self.venvdir,"},{"line_number":50,"context_line":"            \"OVS_DBDIR\": self.venvdir,"},{"line_number":51,"context_line":"            \"OVS_SYSCONFDIR\": self.venvdir,"},{"line_number":52,"context_line":"            \"PATH\": \"\"}"},{"line_number":53,"context_line":"        self.remove \u003d remove"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"4958163d_e78243ba","line":51,"range":{"start_line":48,"start_character":0,"end_line":51,"end_character":43},"in_reply_to":"71b16f33_f1a5b0b9","updated":"2026-01-29 19:38:30.000000000","message":"I\u0027ve considered moving all env stuff to the ProcessFixture and subclasses, including the call() method. Which basically just makes VenvFixture fixtures.TempDir. It\u0027ll take a little investigation to see if this makes sense.","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"12fda2ac8471ffd4f2108e48eb303f6c5ff8af4e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        super().__init__()"},{"line_number":46,"context_line":"        self.venvdir \u003d venvdir or tempfile.mkdtemp()"},{"line_number":47,"context_line":"        self.env \u003d {"},{"line_number":48,"context_line":"            \"OVS_RUNDIR\": self.venvdir,"},{"line_number":49,"context_line":"            \"OVS_LOGDIR\": self.venvdir,"},{"line_number":50,"context_line":"            \"OVS_DBDIR\": self.venvdir,"},{"line_number":51,"context_line":"            \"OVS_SYSCONFDIR\": self.venvdir,"},{"line_number":52,"context_line":"            \"PATH\": \"\"}"},{"line_number":53,"context_line":"        self.remove \u003d remove"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6f92425e_595f80a0","line":51,"range":{"start_line":48,"start_character":0,"end_line":51,"end_character":43},"in_reply_to":"9426c2e4_74c06a24","updated":"2026-02-04 21:49:23.000000000","message":"All my fault, I didn\u0027t get the code right and I thought OvsVenvFixture inherits from the VenvFixture, so the change seemed super-simple to me.","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"8fa354cdd2fe897097dad01fac3d7c1ed52b46c5","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        super().__init__()"},{"line_number":46,"context_line":"        self.venvdir \u003d venvdir or tempfile.mkdtemp()"},{"line_number":47,"context_line":"        self.env \u003d {"},{"line_number":48,"context_line":"            \"OVS_RUNDIR\": self.venvdir,"},{"line_number":49,"context_line":"            \"OVS_LOGDIR\": self.venvdir,"},{"line_number":50,"context_line":"            \"OVS_DBDIR\": self.venvdir,"},{"line_number":51,"context_line":"            \"OVS_SYSCONFDIR\": self.venvdir,"},{"line_number":52,"context_line":"            \"PATH\": \"\"}"},{"line_number":53,"context_line":"        self.remove \u003d remove"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"0b5e4310_cb7b4f21","line":51,"range":{"start_line":48,"start_character":0,"end_line":51,"end_character":43},"in_reply_to":"df2868f5_3c01bdf7","updated":"2026-01-30 14:29:09.000000000","message":"I go back and forth on it. The env variables *aren\u0027t* really shared. They are passed to the call() method. We\u0027re just pretending that it\u0027s kind of a shared environment. In something like ovn-sandbox, if you change an env variable it affects everything running in the shell. These processes *aren\u0027t* running in the same shell. If everything was composition, you\u0027d just pass your env to call() as the sum of the fixture\u0027s individual env\u0027s for example. But like I said, I go back and forth on it. It\u0027s probably not important enough to actually change either way.","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4d139770b36f6636a37b2fd60c9a7a7aef748c24","unresolved":true,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class ProcessFixture(fixtures.Fixture):"},{"line_number":96,"context_line":"    def __init__(self, venv, name):"},{"line_number":97,"context_line":"        self.venv \u003d venv"},{"line_number":98,"context_line":"        self.name \u003d name"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3b169e32_13dad642","line":97,"updated":"2026-01-29 19:21:19.000000000","message":"I don\u0027t really know what `Fixture.__init__()` does but I\u0027d call it here.","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"61e87f28381189bdf69b6bb3f5764d1bec6942e1","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class ProcessFixture(fixtures.Fixture):"},{"line_number":96,"context_line":"    def __init__(self, venv, name):"},{"line_number":97,"context_line":"        self.venv \u003d venv"},{"line_number":98,"context_line":"        self.name \u003d name"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f4a799e2_60319e39","line":97,"in_reply_to":"3b169e32_13dad642","updated":"2026-01-29 19:38:30.000000000","message":"The docs don\u0027t use it, so I figured I shouldn\u0027t. https://pypi.org/project/fixtures/","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4d139770b36f6636a37b2fd60c9a7a7aef748c24","unresolved":true,"context_lines":[{"line_number":311,"context_line":"        # For backwards compatibility"},{"line_number":312,"context_line":"        return self.venv.call(*args, **kwargs)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _setUp(self):"},{"line_number":315,"context_line":"        super()._setUp()"},{"line_number":316,"context_line":"        if self._setup_venv:"},{"line_number":317,"context_line":"            self.useFixture(self.venv)"}],"source_content_type":"text/x-python","patch_set":2,"id":"971c3e2d_0b328f1d","line":314,"updated":"2026-01-29 19:21:19.000000000","message":"Would be beautiful if this follows the `__init__` method","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"61e87f28381189bdf69b6bb3f5764d1bec6942e1","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        # For backwards compatibility"},{"line_number":312,"context_line":"        return self.venv.call(*args, **kwargs)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _setUp(self):"},{"line_number":315,"context_line":"        super()._setUp()"},{"line_number":316,"context_line":"        if self._setup_venv:"},{"line_number":317,"context_line":"            self.useFixture(self.venv)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ca0737c8_bd78f1c5","line":314,"in_reply_to":"971c3e2d_0b328f1d","updated":"2026-01-29 19:38:30.000000000","message":"Done","commit_id":"bb7b33ecf31092a5723f7630f11792637368205c"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9eeb69f178524e8f3acf29aed05c8ca62799d6da","unresolved":true,"context_lines":[{"line_number":281,"context_line":"        if self._setup_venv:"},{"line_number":282,"context_line":"            self.useFixture(self.venv)"},{"line_number":283,"context_line":"        self.useFixture(self.ovsdb_server)"},{"line_number":284,"context_line":"        self.vswitchd \u003d self.useFixture(VswitchdFixture("},{"line_number":285,"context_line":"            self.venv, self.ovsdb_server, self.dummy))"},{"line_number":286,"context_line":"        self.init_processes()"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"081bccd5_1f60c093","line":284,"range":{"start_line":284,"start_character":8,"end_line":284,"end_character":21},"updated":"2026-01-29 20:16:29.000000000","message":"This is what useFixture returns and not the VswitchdFixture instance. So when I started to look how it\u0027s used, I found out that likely it\u0027s not, unless I missed it.","commit_id":"d93fe5595e0ab5558b2fcbb9c5c4a65bab520ce5"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"13c9c57156e4654975649a6477b225ec032055db","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        if self._setup_venv:"},{"line_number":282,"context_line":"            self.useFixture(self.venv)"},{"line_number":283,"context_line":"        self.useFixture(self.ovsdb_server)"},{"line_number":284,"context_line":"        self.vswitchd \u003d self.useFixture(VswitchdFixture("},{"line_number":285,"context_line":"            self.venv, self.ovsdb_server, self.dummy))"},{"line_number":286,"context_line":"        self.init_processes()"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"566f6c20_ec0f7ef2","line":284,"range":{"start_line":284,"start_character":8,"end_line":284,"end_character":21},"in_reply_to":"081bccd5_1f60c093","updated":"2026-01-29 21:17:47.000000000","message":"Done","commit_id":"d93fe5595e0ab5558b2fcbb9c5c4a65bab520ce5"}]}
