)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"a98757a51e879f5aae7410e3b00a39bcbddec6ac","unresolved":true,"context_lines":[{"line_number":15,"context_line":"for SQLite-based tests, which have limited concurrency support."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I3883d3b34691f076bde6ecec109bac94cfa12dd9"},{"line_number":18,"context_line":"Signed-off-by: Douglas Viroel \u003cviroel@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"be0718f6_6ae8a541","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":48},"updated":"2026-02-11 11:55:47.000000000","message":"missing the assisted-by claude-code","commit_id":"25e91c84cb9d168512175737bcf9bb4b700feb28"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"for SQLite-based tests, which have limited concurrency support."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I3883d3b34691f076bde6ecec109bac94cfa12dd9"},{"line_number":18,"context_line":"Signed-off-by: Douglas Viroel \u003cviroel@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"a11b2fa3_8309be3c","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":48},"in_reply_to":"be0718f6_6ae8a541","updated":"2026-02-12 13:48:31.000000000","message":"Done","commit_id":"25e91c84cb9d168512175737bcf9bb4b700feb28"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"a98757a51e879f5aae7410e3b00a39bcbddec6ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f8b201ed_934ead03","updated":"2026-02-11 11:55:47.000000000","message":"WIP: still missing some additional work to enable WAL and documentation updates","commit_id":"25e91c84cb9d168512175737bcf9bb4b700feb28"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"83623af6_26ea0192","updated":"2026-02-12 13:48:31.000000000","message":"this looks pretty good over all","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"8bb4df884e8947c0a3f80302f7d280ff3d637934","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d7ba11b3_87213479","updated":"2026-02-17 15:56:54.000000000","message":"Thanks for this. If it works, it works 😊\n\nI understand each fix (using files instead or memory backed, WAL, write_lock fixture...) solves a different situation where we can hit concurrency issues with sqlite. It\u0027d be nice if we could fix all with just one fix, but I understand we can\u0027t at this point, so for me we can go with it.","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"0781ad5c7b69ddaac7bee31fca12eb94d8702597","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ade2ea0e_9ffad6e3","updated":"2026-02-13 01:23:29.000000000","message":"recheck\n\nContinuous audit tests failed","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"886848358d8c8245fc9a99862560423dd6881a6a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"21c9af15_c4d62043","updated":"2026-02-18 23:38:55.000000000","message":"this should be safe as is so im ok with moving forward with it","commit_id":"64d101d47d0ea90990faa89dc1de9aaba873f0f0"}],"watcher/applier/workflow_engine/default.py":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"39285677e355c9cf2aa9332aa4f21b6b8992600f","unresolved":true,"context_lines":[{"line_number":116,"context_line":"                    flow, executor\u003dexecutor_type, engine\u003dengine_type,"},{"line_number":117,"context_line":"                    max_workers\u003dself.config.max_workers)"},{"line_number":118,"context_line":"            else:"},{"line_number":119,"context_line":"                LOG.info(\"Using Taskflow parallel engine when running \""},{"line_number":120,"context_line":"                         \"in native threading mode.\")"},{"line_number":121,"context_line":"                executor_type \u003d \"threaded\""},{"line_number":122,"context_line":"                engine_type \u003d \"parallel\""}],"source_content_type":"text/x-python","patch_set":4,"id":"e2b3f7ef_4faa8b90","line":119,"in_reply_to":"abfd3b73_cbd7cfcf","updated":"2026-02-11 18:18:31.000000000","message":"Partially documented in release note, and eventlet is going away soon","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    flow, executor\u003dexecutor_type, engine\u003dengine_type,"},{"line_number":117,"context_line":"                    max_workers\u003dself.config.max_workers)"},{"line_number":118,"context_line":"            else:"},{"line_number":119,"context_line":"                LOG.info(\"Using Taskflow parallel engine when running \""},{"line_number":120,"context_line":"                         \"in native threading mode.\")"},{"line_number":121,"context_line":"                executor_type \u003d \"threaded\""},{"line_number":122,"context_line":"                engine_type \u003d \"parallel\""}],"source_content_type":"text/x-python","patch_set":4,"id":"c5e1b7af_7eb4bf46","line":119,"in_reply_to":"e2b3f7ef_4faa8b90","updated":"2026-02-12 13:48:31.000000000","message":"Acknowledged","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":true,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"            e \u003d None"},{"line_number":112,"context_line":"            if eventlet_helper.is_patched():"},{"line_number":113,"context_line":"                executor_type \u003d \"greenthreaded\""},{"line_number":114,"context_line":"                engine_type \u003d \"parallel\""},{"line_number":115,"context_line":"                e \u003d engines.load("},{"line_number":116,"context_line":"                    flow, executor\u003dexecutor_type, engine\u003dengine_type,"}],"source_content_type":"text/x-python","patch_set":5,"id":"6a5b74af_362ca31d","line":113,"in_reply_to":"41bebfa2_45172127","updated":"2026-02-18 13:34:59.000000000","message":"so for eventlet we have \n```\n                e \u003d engines.load(\n                    flow, executor\u003dexecutor_type, engine\u003dengine_type,\n                    max_workers\u003dself.config.max_workers)\n```         \n\nand for threadded we have\n```\n                e \u003d engines.load(\n                    flow, executor_type\u003d\"threaded\", engine\u003dengine_type,\n                    max_workers\u003dself.config.max_workers)\n\n```\n\nin my version i used executor not executor type\n\nhttps://review.opendev.org/c/openstack/watcher/+/976293/1/watcher/applier/workflow_engine/default.py#119\n\n\nlooking at task flow\n\nhttps://github.com/openstack/taskflow/blob/db020073ec95bf0b3906cef879f54b4dbcc3a224/taskflow/engines/helpers.py#L85\n\nand the parralele engine \n\nhttps://github.com/openstack/taskflow/blob/db020073ec95bf0b3906cef879f54b4dbcc3a224/taskflow/engines/action_engine/engine.py#L495\n\n\nthe corerct parmater name is executor not executor_type","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fe26317d0950ecf1642ba01cbdf7e559493d3072","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"            e \u003d None"},{"line_number":112,"context_line":"            if eventlet_helper.is_patched():"},{"line_number":113,"context_line":"                executor_type \u003d \"greenthreaded\""},{"line_number":114,"context_line":"                engine_type \u003d \"parallel\""},{"line_number":115,"context_line":"                e \u003d engines.load("},{"line_number":116,"context_line":"                    flow, executor\u003dexecutor_type, engine\u003dengine_type,"}],"source_content_type":"text/x-python","patch_set":5,"id":"00d28f4c_71980120","line":113,"in_reply_to":"6a5b74af_362ca31d","updated":"2026-02-18 18:09:33.000000000","message":"Acknowledged","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    flow, executor\u003dexecutor_type, engine\u003dengine_type,"},{"line_number":117,"context_line":"                    max_workers\u003dself.config.max_workers)"},{"line_number":118,"context_line":"            else:"},{"line_number":119,"context_line":"                LOG.info(\"Using Taskflow parallel engine when running \""},{"line_number":120,"context_line":"                         \"in native threading mode.\")"},{"line_number":121,"context_line":"                executor_type \u003d \"threaded\""},{"line_number":122,"context_line":"                engine_type \u003d \"parallel\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fe45b35a_743f19ec","line":119,"in_reply_to":"f1259ae8_00225fad","updated":"2026-02-18 13:34:59.000000000","message":"this is not required as we have a dedicated target that test this implictily\n\nalthought hat is not visable in the test themselve just in the tox config so i see why it rsaded this.","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":true,"context_lines":[{"line_number":121,"context_line":"                executor_type \u003d \"threaded\""},{"line_number":122,"context_line":"                engine_type \u003d \"parallel\""},{"line_number":123,"context_line":"                e \u003d engines.load("},{"line_number":124,"context_line":"                    flow, executor_type\u003d\"threaded\", engine\u003dengine_type,"},{"line_number":125,"context_line":"                    max_workers\u003dself.config.max_workers)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"            e.run()"}],"source_content_type":"text/x-python","patch_set":5,"id":"a349afca_adb819e3","line":124,"updated":"2026-02-18 13:34:59.000000000","message":"so this is a bug\n\nits workign today becahse teh teaded exefcutor happens to be the default\n\nhttps://github.com/openstack/taskflow/blob/master/taskflow/engines/action_engine/engine.py#L573","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fe26317d0950ecf1642ba01cbdf7e559493d3072","unresolved":true,"context_lines":[{"line_number":121,"context_line":"                executor_type \u003d \"threaded\""},{"line_number":122,"context_line":"                engine_type \u003d \"parallel\""},{"line_number":123,"context_line":"                e \u003d engines.load("},{"line_number":124,"context_line":"                    flow, executor_type\u003d\"threaded\", engine\u003dengine_type,"},{"line_number":125,"context_line":"                    max_workers\u003dself.config.max_workers)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"            e.run()"}],"source_content_type":"text/x-python","patch_set":5,"id":"d858a949_1deb65b9","line":124,"in_reply_to":"a349afca_adb819e3","updated":"2026-02-18 18:09:33.000000000","message":"Yeah, not sure when that happenned, I think that autocomplete got me there. Fixing in next PS, thanks","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"176464849ed9cdfd2b9ca3221da77b9415b5fde5","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                executor_type \u003d \"threaded\""},{"line_number":122,"context_line":"                engine_type \u003d \"parallel\""},{"line_number":123,"context_line":"                e \u003d engines.load("},{"line_number":124,"context_line":"                    flow, executor_type\u003d\"threaded\", engine\u003dengine_type,"},{"line_number":125,"context_line":"                    max_workers\u003dself.config.max_workers)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"            e.run()"}],"source_content_type":"text/x-python","patch_set":5,"id":"0b07f7ba_a907e738","line":124,"in_reply_to":"d858a949_1deb65b9","updated":"2026-02-18 23:36:54.000000000","message":"Done","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"}],"watcher/tests/fixtures/db_lock.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":true,"context_lines":[{"line_number":71,"context_line":"                # Release the lock after exiting the database session"},{"line_number":72,"context_line":"                self._db_write_lock.release()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # Patch _session_for_write in watcher\u0027s db api"},{"line_number":75,"context_line":"        patcher \u003d mock.patch.object("},{"line_number":76,"context_line":"            db_api, \u0027_session_for_write\u0027,"},{"line_number":77,"context_line":"            side_effect\u003dlocked_session_for_write)"},{"line_number":78,"context_line":"        patcher.start()"},{"line_number":79,"context_line":"        self.addCleanup(patcher.stop)"}],"source_content_type":"text/x-python","patch_set":3,"id":"0aebabb3_f96a32ef","line":79,"range":{"start_line":74,"start_character":8,"end_line":79,"end_character":37},"updated":"2026-02-12 13:48:31.000000000","message":"you shoudl be using the MockPatchObject fixture form fixtures with self.useFixture","commit_id":"25e91c84cb9d168512175737bcf9bb4b700feb28"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"176464849ed9cdfd2b9ca3221da77b9415b5fde5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                # Release the lock after exiting the database session"},{"line_number":72,"context_line":"                self._db_write_lock.release()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # Patch _session_for_write in watcher\u0027s db api"},{"line_number":75,"context_line":"        patcher \u003d mock.patch.object("},{"line_number":76,"context_line":"            db_api, \u0027_session_for_write\u0027,"},{"line_number":77,"context_line":"            side_effect\u003dlocked_session_for_write)"},{"line_number":78,"context_line":"        patcher.start()"},{"line_number":79,"context_line":"        self.addCleanup(patcher.stop)"}],"source_content_type":"text/x-python","patch_set":3,"id":"e377f98b_1f7f1c1b","line":79,"range":{"start_line":74,"start_character":8,"end_line":79,"end_character":37},"in_reply_to":"0aebabb3_f96a32ef","updated":"2026-02-18 23:36:54.000000000","message":"Done","commit_id":"25e91c84cb9d168512175737bcf9bb4b700feb28"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"39285677e355c9cf2aa9332aa4f21b6b8992600f","unresolved":true,"context_lines":[{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        super().__init__()"},{"line_number":44,"context_line":"        self.lock_timeout \u003d lock_timeout"},{"line_number":45,"context_line":"        self._db_write_lock \u003d threading.RLock()  # Reentrant lock"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _setUp(self):"},{"line_number":48,"context_line":"        \"\"\"Set up the database write lock.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9116cf84_d4d4cbc3","line":45,"in_reply_to":"18f85bf9_78f6762a","updated":"2026-02-11 18:18:31.000000000","message":"the scope of session_for_write is small so we don\u0027t have nested writes","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        super().__init__()"},{"line_number":44,"context_line":"        self.lock_timeout \u003d lock_timeout"},{"line_number":45,"context_line":"        self._db_write_lock \u003d threading.RLock()  # Reentrant lock"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _setUp(self):"},{"line_number":48,"context_line":"        \"\"\"Set up the database write lock.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"a206b96b_63f6ab01","line":45,"in_reply_to":"9116cf84_d4d4cbc3","updated":"2026-02-12 13:48:31.000000000","message":"this is also test code so this is proably ok\n\nwe actully may have nested transaction in on place but that is out of scope\n\napprently we have once code path where notify() raises an excption that does a diffent notify() but i need to verify that as a real thing and not ai confution.","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"39285677e355c9cf2aa9332aa4f21b6b8992600f","unresolved":true,"context_lines":[{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        super().__init__()"},{"line_number":44,"context_line":"        self.lock_timeout \u003d lock_timeout"},{"line_number":45,"context_line":"        self._db_write_lock \u003d threading.RLock()  # Reentrant lock"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _setUp(self):"},{"line_number":48,"context_line":"        \"\"\"Set up the database write lock.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"e13fd2b1_6bb7bc23","line":45,"in_reply_to":"affdcc29_8bda263a","updated":"2026-02-11 18:18:31.000000000","message":"I don\u0027t see a use for that in this fixture.","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        super().__init__()"},{"line_number":44,"context_line":"        self.lock_timeout \u003d lock_timeout"},{"line_number":45,"context_line":"        self._db_write_lock \u003d threading.RLock()  # Reentrant lock"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _setUp(self):"},{"line_number":48,"context_line":"        \"\"\"Set up the database write lock.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"18d01f33_ce776d8d","line":45,"in_reply_to":"e13fd2b1_6bb7bc23","updated":"2026-02-12 13:48:31.000000000","message":"Acknowledged","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"39285677e355c9cf2aa9332aa4f21b6b8992600f","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        def locked_session_for_write():"},{"line_number":54,"context_line":"            \"\"\"Wrapper that adds locking around _session_for_write.\"\"\""},{"line_number":55,"context_line":"            # Acquire the lock before entering the database session"},{"line_number":56,"context_line":"            acquired \u003d self._db_write_lock.acquire("},{"line_number":57,"context_line":"                blocking\u003dTrue,"},{"line_number":58,"context_line":"                timeout\u003dself.lock_timeout if self.lock_timeout else -1)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"8f9041a0_d4df645e","line":56,"in_reply_to":"07e5ea61_b5a19865","updated":"2026-02-11 18:18:31.000000000","message":"i don\u0027t think that is needed, only used in unit testing","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        def locked_session_for_write():"},{"line_number":54,"context_line":"            \"\"\"Wrapper that adds locking around _session_for_write.\"\"\""},{"line_number":55,"context_line":"            # Acquire the lock before entering the database session"},{"line_number":56,"context_line":"            acquired \u003d self._db_write_lock.acquire("},{"line_number":57,"context_line":"                blocking\u003dTrue,"},{"line_number":58,"context_line":"                timeout\u003dself.lock_timeout if self.lock_timeout else -1)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1f538e0e_acf243a3","line":56,"in_reply_to":"8f9041a0_d4df645e","updated":"2026-02-12 13:48:31.000000000","message":"Acknowledged","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"39285677e355c9cf2aa9332aa4f21b6b8992600f","unresolved":true,"context_lines":[{"line_number":57,"context_line":"                blocking\u003dTrue,"},{"line_number":58,"context_line":"                timeout\u003dself.lock_timeout if self.lock_timeout else -1)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"            if not acquired:"},{"line_number":61,"context_line":"                raise RuntimeError("},{"line_number":62,"context_line":"                    f\"Failed to acquire database write lock within \""},{"line_number":63,"context_line":"                    f\"{self.lock_timeout} seconds\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"95d7917b_69df68ef","line":60,"in_reply_to":"46eb6650_960dd173","updated":"2026-02-11 18:18:31.000000000","message":"according with acquire() documentation, it will return False only when: \"not blocking or the timeout was reached\" so we should have a timeout configured to reach this point","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                blocking\u003dTrue,"},{"line_number":58,"context_line":"                timeout\u003dself.lock_timeout if self.lock_timeout else -1)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"            if not acquired:"},{"line_number":61,"context_line":"                raise RuntimeError("},{"line_number":62,"context_line":"                    f\"Failed to acquire database write lock within \""},{"line_number":63,"context_line":"                    f\"{self.lock_timeout} seconds\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"f79976e4_60a16cad","line":60,"in_reply_to":"95d7917b_69df68ef","updated":"2026-02-12 13:48:31.000000000","message":"yes that tracks\nits true the fstrign could cause a diffent atribute error but its safe in this case.","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                self._db_write_lock.release()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # Patch _session_for_write in watcher\u0027s db api"},{"line_number":74,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":75,"context_line":"            db_api, \u0027_session_for_write\u0027, locked_session_for_write))"}],"source_content_type":"text/x-python","patch_set":4,"id":"45ebfa35_cf2074ac","line":74,"in_reply_to":"906a9e8b_c62d235f","updated":"2026-02-12 13:48:31.000000000","message":"this is not how our test runner works we run each worker in its own process and one one test at a time per process so that will not happen","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":true,"context_lines":[{"line_number":34,"context_line":"    function, ensuring that all database writes are serialized."},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, lock_timeout\u003dNone):"},{"line_number":38,"context_line":"        \"\"\"Initialize the DatabaseWriteLock fixture."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        :param lock_timeout: Optional timeout for acquiring the lock (seconds)."}],"source_content_type":"text/x-python","patch_set":5,"id":"13f55f22_8ee44827","line":37,"in_reply_to":"0883f3d2_00388efe","updated":"2026-02-18 13:34:59.000000000","message":"this is vaild  but on its own its not worth a respine but it would be nice to adress.","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fe26317d0950ecf1642ba01cbdf7e559493d3072","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    function, ensuring that all database writes are serialized."},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, lock_timeout\u003dNone):"},{"line_number":38,"context_line":"        \"\"\"Initialize the DatabaseWriteLock fixture."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        :param lock_timeout: Optional timeout for acquiring the lock (seconds)."}],"source_content_type":"text/x-python","patch_set":5,"id":"3dfae6a9_c5921276","line":37,"in_reply_to":"13f55f22_8ee44827","updated":"2026-02-18 18:09:33.000000000","message":"I don\u0027t think that is needed for a fixture, but since it is very easy for claude to add, I will add in next ps","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    function, ensuring that all database writes are serialized."},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, lock_timeout\u003dNone):"},{"line_number":38,"context_line":"        \"\"\"Initialize the DatabaseWriteLock fixture."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        :param lock_timeout: Optional timeout for acquiring the lock (seconds)."}],"source_content_type":"text/x-python","patch_set":5,"id":"53097b85_64e626c7","line":37,"in_reply_to":"527605b4_837e57ab","updated":"2026-02-18 13:34:59.000000000","message":"nice to have but note required for a test fixture.","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    function, ensuring that all database writes are serialized."},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, lock_timeout\u003dNone):"},{"line_number":38,"context_line":"        \"\"\"Initialize the DatabaseWriteLock fixture."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        :param lock_timeout: Optional timeout for acquiring the lock (seconds)."}],"source_content_type":"text/x-python","patch_set":5,"id":"3dbb7a6c_29728ce2","line":37,"in_reply_to":"a74ad4c1_90d65617","updated":"2026-02-18 13:34:59.000000000","message":"we could od this although tis happening implictly so this is just a nice to have","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    function, ensuring that all database writes are serialized."},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, lock_timeout\u003dNone):"},{"line_number":38,"context_line":"        \"\"\"Initialize the DatabaseWriteLock fixture."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        :param lock_timeout: Optional timeout for acquiring the lock (seconds)."}],"source_content_type":"text/x-python","patch_set":5,"id":"efcc632c_16512ca4","line":37,"in_reply_to":"c4052bdb_d58b09cb","updated":"2026-02-18 13:34:59.000000000","message":"yes and i want to raise this as a genral topic for the ptg to discuss\nfor now type hints ar enot requried","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        super().__init__()"},{"line_number":44,"context_line":"        self.lock_timeout \u003d lock_timeout"},{"line_number":45,"context_line":"        self._db_write_lock \u003d threading.RLock()  # Reentrant lock"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _setUp(self):"},{"line_number":48,"context_line":"        \"\"\"Set up the database write lock.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"2332b5dd_0db039d7","line":45,"in_reply_to":"e17524fa_04890f29","updated":"2026-02-18 13:34:59.000000000","message":"not requried","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.lock_timeout \u003d lock_timeout"},{"line_number":45,"context_line":"        self._db_write_lock \u003d threading.RLock()  # Reentrant lock"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _setUp(self):"},{"line_number":48,"context_line":"        \"\"\"Set up the database write lock.\"\"\""},{"line_number":49,"context_line":"        # Store the original _session_for_write function"},{"line_number":50,"context_line":"        original_session_for_write \u003d db_api._session_for_write"}],"source_content_type":"text/x-python","patch_set":5,"id":"73e7ade5_c5bc3fc5","line":47,"in_reply_to":"99aee1d2_8cac6691","updated":"2026-02-18 13:34:59.000000000","message":"this is a nit:","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        def locked_session_for_write():"},{"line_number":54,"context_line":"            \"\"\"Wrapper that adds locking around _session_for_write.\"\"\""},{"line_number":55,"context_line":"            # Acquire the lock before entering the database session"},{"line_number":56,"context_line":"            acquired \u003d self._db_write_lock.acquire("},{"line_number":57,"context_line":"                blocking\u003dTrue,"},{"line_number":58,"context_line":"                timeout\u003dself.lock_timeout if self.lock_timeout else -1)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"c1c5d597_fed4a7d1","line":56,"in_reply_to":"9d7770ef_a74690a7","updated":"2026-02-18 13:34:59.000000000","message":"this is valid and would allow you to remvoe the try finally","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fe26317d0950ecf1642ba01cbdf7e559493d3072","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        def locked_session_for_write():"},{"line_number":54,"context_line":"            \"\"\"Wrapper that adds locking around _session_for_write.\"\"\""},{"line_number":55,"context_line":"            # Acquire the lock before entering the database session"},{"line_number":56,"context_line":"            acquired \u003d self._db_write_lock.acquire("},{"line_number":57,"context_line":"                blocking\u003dTrue,"},{"line_number":58,"context_line":"                timeout\u003dself.lock_timeout if self.lock_timeout else -1)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fb5c4bc6_e96fad46","line":56,"in_reply_to":"c1c5d597_fed4a7d1","updated":"2026-02-18 18:09:33.000000000","message":"IIUC to provide the timeout value I would need to build a new context manager to handle the acquire/release, so I would still need a try/finally for that. Only replacing with \u0027with self._db_write_lock:\u0027 will not work for us here due to the timeout. Did I miss something?","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"176464849ed9cdfd2b9ca3221da77b9415b5fde5","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        def locked_session_for_write():"},{"line_number":54,"context_line":"            \"\"\"Wrapper that adds locking around _session_for_write.\"\"\""},{"line_number":55,"context_line":"            # Acquire the lock before entering the database session"},{"line_number":56,"context_line":"            acquired \u003d self._db_write_lock.acquire("},{"line_number":57,"context_line":"                blocking\u003dTrue,"},{"line_number":58,"context_line":"                timeout\u003dself.lock_timeout if self.lock_timeout else -1)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"15b4fc29_55ad6ffb","line":56,"in_reply_to":"fb5c4bc6_e96fad46","updated":"2026-02-18 23:36:54.000000000","message":"so your right if we use the contex manager protocol as recommended in the docs we cant pass a timeout\n\nhttps://docs.python.org/3/library/threading.html#rlock-objects\n\nTraceback (most recent call last):\n  File \"\u003cpython-input-4\u003e\", line 1, in \u003cmodule\u003e\n    with db_write_lock(blocking\u003dTrue, timeout\u003d5):\n         ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^\nTypeError: \u0027_thread.RLock\u0027 object is not callable\n\nin the ohter hand we are never usign the time out and blocking is the default\n\nso reallyu there is no point it tryign to support passign a time out and we can just use it as a context manager instead.","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":true,"context_lines":[{"line_number":71,"context_line":"                self._db_write_lock.release()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # Patch _session_for_write in watcher\u0027s db api"},{"line_number":74,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":75,"context_line":"            db_api, \u0027_session_for_write\u0027, locked_session_for_write))"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba10d597_5b44b04e","line":74,"in_reply_to":"2945e404_9123e39d","updated":"2026-02-18 13:34:59.000000000","message":"also valid. this is good practice but is generally a nit","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"176464849ed9cdfd2b9ca3221da77b9415b5fde5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                self._db_write_lock.release()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # Patch _session_for_write in watcher\u0027s db api"},{"line_number":74,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":75,"context_line":"            db_api, \u0027_session_for_write\u0027, locked_session_for_write))"}],"source_content_type":"text/x-python","patch_set":5,"id":"504f90b6_02e22635","line":74,"in_reply_to":"b749d844_b6c4478c","updated":"2026-02-18 23:36:54.000000000","message":"Acknowledged","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fe26317d0950ecf1642ba01cbdf7e559493d3072","unresolved":true,"context_lines":[{"line_number":71,"context_line":"                self._db_write_lock.release()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # Patch _session_for_write in watcher\u0027s db api"},{"line_number":74,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":75,"context_line":"            db_api, \u0027_session_for_write\u0027, locked_session_for_write))"}],"source_content_type":"text/x-python","patch_set":5,"id":"b749d844_b6c4478c","line":74,"in_reply_to":"ba10d597_5b44b04e","updated":"2026-02-18 18:09:33.000000000","message":"by following the sugestion I get:\n\"TypeError: autospec creates the mock for you. Can\u0027t specify autospec and new.\"\nskipping this for now..","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"}],"watcher/tests/fixtures/watcher.py":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1469bedfc30e9f8dc2691a8f7714b4dd072b0b26","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        self.addCleanup(mock_osc.stop)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class TempFile(fixtures.Fixture):"},{"line_number":144,"context_line":"    \"\"\"Create a temporary file.\"\"\""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def __init__(self, dir\u003dNone, suffix\u003dNone, prefix\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"e310e0be_a90c8e1f","line":143,"in_reply_to":"35188716_98707e13","updated":"2026-02-12 22:55:53.000000000","message":"It was good to change that in the end because it started to fail. Some tests started to fail because they were reusing some configuration from previous tests (tests executed in the same worker thread/process). I added another fixture to replace the enginefacade with a local one and solved the problem (similar approach from another repos like nova)","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        self.addCleanup(mock_osc.stop)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class TempFile(fixtures.Fixture):"},{"line_number":144,"context_line":"    \"\"\"Create a temporary file.\"\"\""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def __init__(self, dir\u003dNone, suffix\u003dNone, prefix\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"80ffbd9f_00842028","line":143,"in_reply_to":"482c5e03_89ee711c","updated":"2026-02-12 13:48:31.000000000","message":"why are you creating your own tempfile fixture instead o using\n\nNestedTempfile\n\nhttps://github.com/testing-cabal/fixtures/blob/master/fixtures/_fixtures/tempdir.py#L59-L72\n\nwthat maskes it so temfiles created with temfile are put inside a tempdir managed by the TempDir fixture\n\nso you can be sure they will all get cleaned up at the end\n\nmy general suggstion is lets enabeld the nestedTempFile fixture in our base testcase in watcher \n\nthat shoudl mean all useage of tempfile in our tests will automaticlly be cleaned up by default unless you explcitly wrok around that\n\nby doing  tempfile.mkdtemp(dir\u003d\"/some/other/root\")","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"23a5a633c44bd13f044f626ddce8e0a56736aa80","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        self.addCleanup(mock_osc.stop)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class TempFile(fixtures.Fixture):"},{"line_number":144,"context_line":"    \"\"\"Create a temporary file.\"\"\""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def __init__(self, dir\u003dNone, suffix\u003dNone, prefix\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"35188716_98707e13","line":143,"in_reply_to":"80ffbd9f_00842028","updated":"2026-02-12 14:14:53.000000000","message":"The fixture mentioned will deal only with the tempdir, but it will not create the tempfile. But indeed I can crated the tempdir and don\u0027t need to handle the cleanup afterwards and let the test create the db file without any fixture.\nLet me send a new PS in a couple of minutes. Thanks","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"39285677e355c9cf2aa9332aa4f21b6b8992600f","unresolved":true,"context_lines":[{"line_number":140,"context_line":"        self.addCleanup(mock_osc.stop)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class TempFile(fixtures.Fixture):"},{"line_number":144,"context_line":"    \"\"\"Create a temporary file.\"\"\""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def __init__(self, dir\u003dNone, suffix\u003dNone, prefix\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"482c5e03_89ee711c","line":143,"in_reply_to":"b1976347_9eafa66c","updated":"2026-02-11 18:18:31.000000000","message":"Not needed for this usage atm","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"39285677e355c9cf2aa9332aa4f21b6b8992600f","unresolved":true,"context_lines":[{"line_number":157,"context_line":"        self.suffix \u003d suffix"},{"line_number":158,"context_line":"        self.prefix \u003d prefix"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _setUp(self):"},{"line_number":161,"context_line":"        fd, self.path \u003d tempfile.mkstemp("},{"line_number":162,"context_line":"            dir\u003dself.dir,"},{"line_number":163,"context_line":"            suffix\u003dself.suffix,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dd82fd4b_8b01ebd3","line":160,"in_reply_to":"bf2b8141_cfbf8b30","updated":"2026-02-11 18:18:31.000000000","message":"it is handling \"No such file or director\" error","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":true,"context_lines":[{"line_number":163,"context_line":"            suffix\u003dself.suffix,"},{"line_number":164,"context_line":"            prefix\u003dself.prefix)"},{"line_number":165,"context_line":"        os.close(fd)"},{"line_number":166,"context_line":"        self.addCleanup(self._cleanup_file)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _cleanup_file(self):"},{"line_number":169,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"e7279774_48995430","line":166,"updated":"2026-02-12 13:48:31.000000000","message":"at the very minitum you should be useing the TempDir fixture for this\nhttps://github.com/testing-cabal/fixtures/blob/master/fixtures/_fixtures/tempdir.py#L28","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"}],"watcher/tests/unit/db/base.py":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"a98757a51e879f5aae7410e3b00a39bcbddec6ac","unresolved":true,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def setUp(self):"},{"line_number":61,"context_line":"        cfg.CONF.set_override(\"enable_authentication\", False)"},{"line_number":62,"context_line":"        # NOTE(dviroel):Use sqlite DB file to avoid single connection"},{"line_number":63,"context_line":"        # limitation from in memory db"},{"line_number":64,"context_line":"        dbfile \u003d tempfile.mkstemp()[1]"},{"line_number":65,"context_line":"        conn_str \u003d \"sqlite:///\" + dbfile"},{"line_number":66,"context_line":"        cfg.CONF.set_override(\"connection\", conn_str, group\u003d\"database\")"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super().setUp()"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"419d6814_362ef72c","line":66,"range":{"start_line":62,"start_character":0,"end_line":66,"end_character":71},"updated":"2026-02-11 11:55:47.000000000","message":"this still requires more refinement","commit_id":"25e91c84cb9d168512175737bcf9bb4b700feb28"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"39285677e355c9cf2aa9332aa4f21b6b8992600f","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        # Enable WAL journaling mode: \"WAL provides more concurrency as"},{"line_number":72,"context_line":"        # readers do not block writers and a writer does not block readers.\""},{"line_number":73,"context_line":"        # More info at: https://www.sqlite.org/wal.html"},{"line_number":74,"context_line":"        conn \u003d sqlite3.connect(dbfile.path)"},{"line_number":75,"context_line":"        conn.execute(\"PRAGMA journal_mode\u003dWAL\")"},{"line_number":76,"context_line":"        conn.close()"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"e866fc4a_7fc05dcd","line":74,"in_reply_to":"3c1db133_de3fae13","updated":"2026-02-11 18:18:31.000000000","message":"Ack, can be added if a new PS is sent","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"23a5a633c44bd13f044f626ddce8e0a56736aa80","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        # Enable WAL journaling mode: \"WAL provides more concurrency as"},{"line_number":72,"context_line":"        # readers do not block writers and a writer does not block readers.\""},{"line_number":73,"context_line":"        # More info at: https://www.sqlite.org/wal.html"},{"line_number":74,"context_line":"        conn \u003d sqlite3.connect(dbfile.path)"},{"line_number":75,"context_line":"        conn.execute(\"PRAGMA journal_mode\u003dWAL\")"},{"line_number":76,"context_line":"        conn.close()"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fe216613_7d363b72","line":74,"in_reply_to":"c180b7ba_afda71d2","updated":"2026-02-12 14:14:53.000000000","message":"good idea","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7899be51226e405070fe80410e29cf935ce248f9","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        # Enable WAL journaling mode: \"WAL provides more concurrency as"},{"line_number":72,"context_line":"        # readers do not block writers and a writer does not block readers.\""},{"line_number":73,"context_line":"        # More info at: https://www.sqlite.org/wal.html"},{"line_number":74,"context_line":"        conn \u003d sqlite3.connect(dbfile.path)"},{"line_number":75,"context_line":"        conn.execute(\"PRAGMA journal_mode\u003dWAL\")"},{"line_number":76,"context_line":"        conn.close()"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"c180b7ba_afda71d2","line":74,"in_reply_to":"e866fc4a_7fc05dcd","updated":"2026-02-12 13:48:31.000000000","message":"can you also wrapw this win a with statemet\ni think this works\n```\nwith sqlite3.connect(dbfile.path) as conn:\n conn.execute(\"PRAGMA journal_mode\u003dWAL\")\n```","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1469bedfc30e9f8dc2691a8f7714b4dd072b0b26","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        # Enable WAL journaling mode: \"WAL provides more concurrency as"},{"line_number":72,"context_line":"        # readers do not block writers and a writer does not block readers.\""},{"line_number":73,"context_line":"        # More info at: https://www.sqlite.org/wal.html"},{"line_number":74,"context_line":"        conn \u003d sqlite3.connect(dbfile.path)"},{"line_number":75,"context_line":"        conn.execute(\"PRAGMA journal_mode\u003dWAL\")"},{"line_number":76,"context_line":"        conn.close()"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"a5b3b5fd_14c206f0","line":74,"in_reply_to":"fe216613_7d363b72","updated":"2026-02-12 22:55:53.000000000","message":"Done","commit_id":"2cd9657684cd0909627119fe69db1a7837ae2023"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"0781ad5c7b69ddaac7bee31fca12eb94d8702597","unresolved":true,"context_lines":[{"line_number":63,"context_line":"    def setUp(self):"},{"line_number":64,"context_line":"        CONF.set_override(\"enable_authentication\", False)"},{"line_number":65,"context_line":"        # Creates a temporary dir to hold sqlite temp files"},{"line_number":66,"context_line":"        # and patch tempile to use it as default dir."},{"line_number":67,"context_line":"        self.useFixture(fixtures.NestedTempfile())"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # NOTE(dviroel): Using file-backed database to support multiple"}],"source_content_type":"text/x-python","patch_set":5,"id":"90de7407_d422cee5","line":66,"range":{"start_line":66,"start_character":20,"end_line":66,"end_character":27},"updated":"2026-02-13 01:23:29.000000000","message":"tyepo: tempfile","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # NOTE(dviroel): Using file-backed database to support multiple"},{"line_number":70,"context_line":"        # native thread, since each one can have its own connection to"},{"line_number":71,"context_line":"        # the database."},{"line_number":72,"context_line":"        fd, dbfile_path \u003d tempfile.mkstemp(prefix\u003d\"watcher_test_\","},{"line_number":73,"context_line":"                                           suffix\u003d\".db\")"},{"line_number":74,"context_line":"        os.close(fd)"}],"source_content_type":"text/x-python","patch_set":5,"id":"50514f91_1eeddef4","line":71,"updated":"2026-02-18 13:34:59.000000000","message":"we should note here that the tempfiles will be clenaed up by the NestedTempfile fixutre","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fe26317d0950ecf1642ba01cbdf7e559493d3072","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # NOTE(dviroel): Using file-backed database to support multiple"},{"line_number":70,"context_line":"        # native thread, since each one can have its own connection to"},{"line_number":71,"context_line":"        # the database."},{"line_number":72,"context_line":"        fd, dbfile_path \u003d tempfile.mkstemp(prefix\u003d\"watcher_test_\","},{"line_number":73,"context_line":"                                           suffix\u003d\".db\")"},{"line_number":74,"context_line":"        os.close(fd)"}],"source_content_type":"text/x-python","patch_set":5,"id":"b08d00f1_025f25b4","line":71,"in_reply_to":"50514f91_1eeddef4","updated":"2026-02-18 18:09:33.000000000","message":"Done","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        # native thread, since each one can have its own connection to"},{"line_number":71,"context_line":"        # the database."},{"line_number":72,"context_line":"        fd, dbfile_path \u003d tempfile.mkstemp(prefix\u003d\"watcher_test_\","},{"line_number":73,"context_line":"                                           suffix\u003d\".db\")"},{"line_number":74,"context_line":"        os.close(fd)"},{"line_number":75,"context_line":"        CONF.set_override("},{"line_number":76,"context_line":"            \"connection\", f\"sqlite:///{dbfile_path}\", group\u003d\"database\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"d6a0e7da_e1006763","line":73,"in_reply_to":"34ea38dc_a724c536","updated":"2026-02-18 13:34:59.000000000","message":"in this case its not but a comment might help\nwe need to do this explcity so that the content is flushed before we connect.","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fe26317d0950ecf1642ba01cbdf7e559493d3072","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        # native thread, since each one can have its own connection to"},{"line_number":71,"context_line":"        # the database."},{"line_number":72,"context_line":"        fd, dbfile_path \u003d tempfile.mkstemp(prefix\u003d\"watcher_test_\","},{"line_number":73,"context_line":"                                           suffix\u003d\".db\")"},{"line_number":74,"context_line":"        os.close(fd)"},{"line_number":75,"context_line":"        CONF.set_override("},{"line_number":76,"context_line":"            \"connection\", f\"sqlite:///{dbfile_path}\", group\u003d\"database\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"e2da90d6_2a2b1ff7","line":73,"in_reply_to":"d6a0e7da_e1006763","updated":"2026-02-18 18:09:33.000000000","message":"Done","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e66b33723d58518e8de0ac67f4893e3b559d84b9","unresolved":true,"context_lines":[{"line_number":80,"context_line":"        # Note that WAL journal mode is persistent, if we close and reopen"},{"line_number":81,"context_line":"        # the database, it will come back in WAL mode."},{"line_number":82,"context_line":"        # More info at: https://www.sqlite.org/wal.html"},{"line_number":83,"context_line":"        with sqlite3.connect(dbfile_path) as conn:"},{"line_number":84,"context_line":"            conn.execute(\"PRAGMA journal_mode\u003dWAL\")"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"681773e9_f174186d","line":83,"in_reply_to":"1cfa9121_7d9cd2db","updated":"2026-02-18 13:34:59.000000000","message":"this is nice to have but i woudl conider this optional.\n\nwe might as well bug instead of assert we shoudl do assertEqual if we do this","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fe26317d0950ecf1642ba01cbdf7e559493d3072","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        # Note that WAL journal mode is persistent, if we close and reopen"},{"line_number":81,"context_line":"        # the database, it will come back in WAL mode."},{"line_number":82,"context_line":"        # More info at: https://www.sqlite.org/wal.html"},{"line_number":83,"context_line":"        with sqlite3.connect(dbfile_path) as conn:"},{"line_number":84,"context_line":"            conn.execute(\"PRAGMA journal_mode\u003dWAL\")"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fdbe963e_d4cbbb5c","line":83,"in_reply_to":"681773e9_f174186d","updated":"2026-02-18 18:09:33.000000000","message":"Done","commit_id":"a60ee25993428b53131875793e58358ab66ef7fb"}]}
