)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"210dc86b985839a2efa63fccce2f3c9c16e77dfe","unresolved":true,"context_lines":[{"line_number":47,"context_line":"deadlock conditions, consistent with the file\u0027s own documented"},{"line_number":48,"context_line":"requirement at line 54-56."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Generated-By: claude-code"},{"line_number":51,"context_line":"Change-Id: I21382521a75b97ff8aee33f72635c4f5e3e151fc"},{"line_number":52,"context_line":"Signed-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"71c30c3e_dd41fbff","line":50,"updated":"2026-02-10 19:48:04.000000000","message":"i shoudl add opus 4.6 here\n\nalso im glad that cached reads are cheap.\n```\n/cost                                                                                                                                                                           \n  ⎿  Total cost:            $25.67                                                                                                                                                \n     Total duration (API):  1h 42m 29s                                                                                                                                            \n     Total duration (wall): 3h 17m 29s                                                                                                                                            \n     Total code changes:    607 lines added, 292 lines removed                                                                                                                    \n     Usage by model:                                                                                                                                                              \n         claude-haiku-4-5:  391.2k input, 73.6k output, 6.4m cache read, 841.7k cache write ($2.45)\n          claude-opus-4-6:  13.1k input, 237.5k output, 22.5m cache read, 952.9k cache write ($23.22)\n```","commit_id":"20e3d639d836b3e68e17a721820a3766db597bf2"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"066b01e7703467babce20f684c3bd307a0116522","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e16dec38_7649caac","updated":"2026-02-18 14:29:25.000000000","message":"we are going to proceed with dougs version and im goign to refacto this to just adress the missing decortors","commit_id":"20e3d639d836b3e68e17a721820a3766db597bf2"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"745cdc343e8388e2426e8bf4649b8a7b7dde8c82","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"dbc3c565_8e73f132","updated":"2026-02-19 16:05:32.000000000","message":"lgtm, this seems to add the decorator to all the methods that missed it","commit_id":"b060ebb2218439c975ffa0e62a3e09780e6ce42c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"8397f4a2cf3fad8b0bf67b0fb1d24f7e5df5635d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ad7e14a2_29f49dee","updated":"2026-02-18 18:28:15.000000000","message":"looks good, thanks!","commit_id":"b060ebb2218439c975ffa0e62a3e09780e6ce42c"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"515ffac58a24e42a93e4a0c171072996ae9caf5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1b189be9_b5dc4c46","updated":"2026-02-26 10:28:12.000000000","message":"recheck","commit_id":"880e2a5c51309731cb3f7c86dcf5882f533a9270"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"39960db55f796a72fc666e37dc5d34424cd62a2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"da5abe17_cee25563","updated":"2026-02-23 08:43:01.000000000","message":"recheck","commit_id":"880e2a5c51309731cb3f7c86dcf5882f533a9270"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fe8c924c20246e09eaa6536e422c9c651d4f292b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ce750057_26f94c60","updated":"2026-02-20 16:11:32.000000000","message":"recheck unrelated failure in watcher-tempest-prometheus-threading","commit_id":"880e2a5c51309731cb3f7c86dcf5882f533a9270"}],"watcher/db/sqlalchemy/api.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cbf3acf8d7d20da588b2d57ae03e5fe08eb5cd80","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"# NOTE(tylerchristie) Please add @oslo_db_api.retry_on_deadlock decorator to"},{"line_number":55,"context_line":"# any new methods using _session_for_write (as deadlocks happen on write), so"},{"line_number":56,"context_line":"# that oslo_db is able to retry in case of deadlocks."},{"line_number":57,"context_line":"def _session_for_write():"},{"line_number":58,"context_line":"    return enginefacade.writer.using(_CONTEXT)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ee425325_7784818d","line":56,"updated":"2026-02-10 19:43:02.000000000","message":"this is the comment refenced below","commit_id":"20e3d639d836b3e68e17a721820a3766db597bf2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cbf3acf8d7d20da588b2d57ae03e5fe08eb5cd80","unresolved":true,"context_lines":[{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    @staticmethod"},{"line_number":805,"context_line":"    def _do_update_action(action_id, values):"},{"line_number":806,"context_line":"        with _session_for_write() as session:"},{"line_number":807,"context_line":"            query \u003d session.query(models.Action)"},{"line_number":808,"context_line":"            query \u003d add_identity_filter(query, action_id)"},{"line_number":809,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3644ea68_dd99dc8d","line":806,"updated":"2026-02-10 19:43:02.000000000","message":"this is where its using _session_for_write\nbut it need to go on the public instace method\nrather then the private static method","commit_id":"20e3d639d836b3e68e17a721820a3766db597bf2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cbf3acf8d7d20da588b2d57ae03e5fe08eb5cd80","unresolved":true,"context_lines":[{"line_number":887,"context_line":""},{"line_number":888,"context_line":"    @staticmethod"},{"line_number":889,"context_line":"    def _do_update_action_plan(action_plan_id, values):"},{"line_number":890,"context_line":"        with _session_for_write() as session:"},{"line_number":891,"context_line":"            query \u003d session.query(models.ActionPlan)"},{"line_number":892,"context_line":"            query \u003d add_identity_filter(query, action_plan_id)"},{"line_number":893,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"546f5bf8_002076a6","line":890,"updated":"2026-02-10 19:43:02.000000000","message":"same here","commit_id":"20e3d639d836b3e68e17a721820a3766db597bf2"}],"watcher/tests/unit/db/base.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6844691ee8c55bcb97be7ff2b673a0fb5db7e669","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        if cls._sqlite_deadlock_filter_registered:"},{"line_number":120,"context_line":"            return"},{"line_number":121,"context_line":"        import re"},{"line_number":122,"context_line":"        from sqlalchemy import exc as sqla_exc"},{"line_number":123,"context_line":"        exc_filters._registry[\"sqlite\"][sqla_exc.OperationalError].insert("},{"line_number":124,"context_line":"            0,"},{"line_number":125,"context_line":"            (DbTestCase._sqlite_locked_as_deadlock,"}],"source_content_type":"text/x-python","patch_set":1,"id":"315841b7_c5135ca7","line":122,"range":{"start_line":121,"start_character":0,"end_line":122,"end_character":46},"updated":"2026-02-10 19:44:46.000000000","message":"ill fix this after a ci run.","commit_id":"20e3d639d836b3e68e17a721820a3766db597bf2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cbf3acf8d7d20da588b2d57ae03e5fe08eb5cd80","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        self.addCleanup(self._cleanup_db)"},{"line_number":91,"context_line":"        self.useFixture(SqliteDatabaseFixture())"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # Register a SQLite exception filter that converts"},{"line_number":94,"context_line":"        # \"database is locked\" to DBDeadlock so oslo_db\u0027s"},{"line_number":95,"context_line":"        # @retry_on_deadlock decorator can retry the operation."},{"line_number":96,"context_line":"        # This is necessary because oslo_db sets isolation_level\u003dNone"},{"line_number":97,"context_line":"        # and manually issues BEGIN, which breaks pysqlite\u0027s"},{"line_number":98,"context_line":"        # built-in busy handler (busy_timeout is never invoked)."},{"line_number":99,"context_line":"        # Registering directly in oslo_db\u0027s filter registry ensures"},{"line_number":100,"context_line":"        # the sqlite-specific filter runs before the wildcard"},{"line_number":101,"context_line":"        # catch-all OperationalError filter."},{"line_number":102,"context_line":"        DbTestCase._register_sqlite_deadlock_filter()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.dbapi \u003d dbapi.get_instance()"},{"line_number":105,"context_line":"        self._id_gen \u003d utils.id_generator()"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    _sqlite_deadlock_filter_registered \u003d False"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @classmethod"},{"line_number":110,"context_line":"    def _register_sqlite_deadlock_filter(cls):"},{"line_number":111,"context_line":"        \"\"\"Add a sqlite-specific filter to oslo_db\u0027s exception registry."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        This inserts a filter for sqlite OperationalError matching"},{"line_number":114,"context_line":"        \"database is locked\" at the BEGINNING of the filter list."},{"line_number":115,"context_line":"        Since oslo_db checks dialect-specific filters (\"sqlite\")"},{"line_number":116,"context_line":"        before wildcard (\"*\") filters, this filter will match before"},{"line_number":117,"context_line":"        the catch-all _raise_operational_errors_directly_filter."},{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        if cls._sqlite_deadlock_filter_registered:"},{"line_number":120,"context_line":"            return"},{"line_number":121,"context_line":"        import re"},{"line_number":122,"context_line":"        from sqlalchemy import exc as sqla_exc"},{"line_number":123,"context_line":"        exc_filters._registry[\"sqlite\"][sqla_exc.OperationalError].insert("},{"line_number":124,"context_line":"            0,"},{"line_number":125,"context_line":"            (DbTestCase._sqlite_locked_as_deadlock,"},{"line_number":126,"context_line":"             re.compile(r\".*database is locked.*\", re.DOTALL)))"},{"line_number":127,"context_line":"        cls._sqlite_deadlock_filter_registered \u003d True"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @staticmethod"},{"line_number":130,"context_line":"    def _sqlite_locked_as_deadlock("},{"line_number":131,"context_line":"            operational_error, match, engine_name, is_disconnect):"},{"line_number":132,"context_line":"        raise oslo_db_exc.DBDeadlock(operational_error)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _cleanup_db(self):"},{"line_number":135,"context_line":"        for suffix in (\u0027\u0027, \u0027-journal\u0027, \u0027-wal\u0027, \u0027-shm\u0027):"},{"line_number":136,"context_line":"            try:"},{"line_number":137,"context_line":"                os.unlink(self._db_path + suffix)"},{"line_number":138,"context_line":"            except OSError:"},{"line_number":139,"context_line":"                pass"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"class MySQLDbTestCase(test_fixtures.OpportunisticDBTestMixin, base.TestCase):"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"eb0f0c60_5fe5ae3e","line":140,"range":{"start_line":93,"start_character":3,"end_line":140,"end_character":1},"updated":"2026-02-10 19:43:02.000000000","message":"this shoudl live in oslo.db evenutally but we can keep it here for now","commit_id":"20e3d639d836b3e68e17a721820a3766db597bf2"}]}
