)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c14cd5bea8ccee285f0d2a39b1618dd92b91a432","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2022-12-07 14:04:51 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Green GreenDBConnection.execute"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ic2695e2e836da5607f4f5c016c660496e2821e07"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9d026af4_a7bbe005","line":7,"updated":"2023-06-09 13:00:59.000000000","message":"is there a bug report? if not, could we at least have some reason for the change in the commit message","commit_id":"90f8255f65e8c41b0b5079dd25aac0d7df9c858d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0aee80e3e257bb04015b058e3b710d982e463f41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0ef9ca1e_01ce7a4d","updated":"2022-11-29 18:43:59.000000000","message":"good luck Tim!","commit_id":"71ebbcc3661580e594bdcf1e5df8c5083ab61015"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8562692d47f9bc6fc451965f2bd67a6c8bc245a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"fb47a9ad_95e3860b","updated":"2022-11-30 22:11:04.000000000","message":"I think we\u0027ll probably wait and see how 3.11.1 turns out before merging this -- though there might be some other things we could break out as other patches.","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9da85f2b033fc36c14eabca1e91c359a3a0735b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"17490cfe_26873b49","updated":"2022-12-05 22:46:32.000000000","message":"Looks like there\u0027s still something needed for py311 tests to pass. I\u0027m still torn about whether to include the __slots__ workaround or not; looks like we\u0027ll just have the one busted cpython release to consider, at least.","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2dc40014f1b002649e40fd201c110dd3dcf9125f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"6d62d3dc_57d59ab1","updated":"2022-12-09 18:49:19.000000000","message":"Dropped the __slots__ declarations, since it looks like there\u0027s just the one CPython release with the bug. We could add them back if we really want, though; seems like a low-cost change if we\u0027ve got users that *really* want to run latest python.","commit_id":"90f8255f65e8c41b0b5079dd25aac0d7df9c858d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c14cd5bea8ccee285f0d2a39b1618dd92b91a432","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"df237f30_44a84396","updated":"2023-06-09 13:00:59.000000000","message":"Fix seems to make sense, but i think a bug report/explanation wouldn\u0027t go amiss. Also wondering about test_backend.py change?","commit_id":"90f8255f65e8c41b0b5079dd25aac0d7df9c858d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"221ce6d38d7d401cb9597499ce3bd2ec9d2e1d48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"503f7757_224c41bc","updated":"2023-06-21 04:08:59.000000000","message":"OK, I think I\u0027ve finally got my head on straight about this.\n\nThe old way was no good -- sure, it\u0027d get us a greened `GreenDBConnection.execute` on py311, but it\u0027d \"double green\" it on earlier pythons, which didn\u0027t seem great.\n\nI also had a moment to spot-check my assumptions, and it looks like we really **do** only try to green `execute`, not `executemany` or `executescript`. I find it a little surprising, honestly, and wonder if maybe that *wasn\u0027t* the case at some point back in the py26 days, or even into the early py27 times -- if maybe at one point those delegated down to `execute` or something. But at this point it\u0027s likely been so many years, I\u0027m not really worried about fixing it Right Now.\n\nI\u0027m reminded again that I *really, really* wish I could just get a file descriptor representing a sqlite DB lock so eventlet could have something to wait on... I thought about trying to use `lock_path` or something, but that still relies on a sleep-and-check loop -- and it still doesn\u0027t solve for someone using `sqlite3` to open \u0026 lock the DB directly :-/","commit_id":"90f8255f65e8c41b0b5079dd25aac0d7df9c858d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a73d09b75962a428a5845051954a04565f6dd906","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"52b87e6e_d770438f","updated":"2023-06-22 16:16:50.000000000","message":"recheck\n\nSome kind of SSH key change error when fetching logs?","commit_id":"c5a3354fea345566010420801e8d27326920db85"}],"swift/common/db.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0aee80e3e257bb04015b058e3b710d982e463f41","unresolved":true,"context_lines":[{"line_number":101,"context_line":"            except sqlite3.OperationalError as e:"},{"line_number":102,"context_line":"                if \u0027locked\u0027 not in str(e):"},{"line_number":103,"context_line":"                    raise"},{"line_number":104,"context_line":"            sleep(retry_wait)"},{"line_number":105,"context_line":"            retry_wait \u003d min(retry_wait * 2, 0.05)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e02ccc06_c9405d2b","line":104,"updated":"2022-11-29 18:43:59.000000000","message":"this sleep is one of my least favorite thing in the whole code base and all interaction with the sqlite objects goes through here - call() is still blocking\n\nWhy do we expect `locked` in the OperationalError if we already have a LockTimeout on the db_file","commit_id":"71ebbcc3661580e594bdcf1e5df8c5083ab61015"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e9f1c6a4cb4a8193afd306ee770c04e102c5b2f2","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            except sqlite3.OperationalError as e:"},{"line_number":102,"context_line":"                if \u0027locked\u0027 not in str(e):"},{"line_number":103,"context_line":"                    raise"},{"line_number":104,"context_line":"            sleep(retry_wait)"},{"line_number":105,"context_line":"            retry_wait \u003d min(retry_wait * 2, 0.05)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"cfac3c4a_23c7d2a6","line":104,"in_reply_to":"e02ccc06_c9405d2b","updated":"2022-11-29 21:38:03.000000000","message":"\u003e this sleep is one of my least favorite thing in the whole code base\n\nOh yeah, it\u0027s horrible -- I hate it, too.\n\n\u003e Why do we expect `locked` in the OperationalError if we already have a LockTimeout on the db_file\n\n\u0027cause we *always* drop the timeout we pass to sqlite3 to 0 -- see the end of GreenDBConnection.__init__ -- we want sqlite3 to bomb quickly, so we can get control back out to the hub. Otherwise, *all* greenthreads are blocked on any DB operations.","commit_id":"71ebbcc3661580e594bdcf1e5df8c5083ab61015"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0aee80e3e257bb04015b058e3b710d982e463f41","unresolved":true,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class GreenDBConnection(sqlite3.Connection):"},{"line_number":132,"context_line":"    \"\"\"SQLite DB Connection handler that plays well with eventlet.\"\"\""},{"line_number":133,"context_line":"    __slots__ \u003d (\u0027timeout\u0027, \u0027db_file\u0027)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def __init__(self, database, timeout\u003dNone, *args, **kwargs):"},{"line_number":136,"context_line":"        if timeout is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"339c8a97_8cbc5fec","line":133,"updated":"2022-11-29 18:43:59.000000000","message":"is this even *reasonable* - sqlite3.Connection doesn\u0027t have any other attributes?","commit_id":"71ebbcc3661580e594bdcf1e5df8c5083ab61015"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e9f1c6a4cb4a8193afd306ee770c04e102c5b2f2","unresolved":true,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class GreenDBConnection(sqlite3.Connection):"},{"line_number":132,"context_line":"    \"\"\"SQLite DB Connection handler that plays well with eventlet.\"\"\""},{"line_number":133,"context_line":"    __slots__ \u003d (\u0027timeout\u0027, \u0027db_file\u0027)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def __init__(self, database, timeout\u003dNone, *args, **kwargs):"},{"line_number":136,"context_line":"        if timeout is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"05cef31a_23cd4157","line":133,"in_reply_to":"339c8a97_8cbc5fec","updated":"2022-11-29 21:38:03.000000000","message":"From https://docs.python.org/3/reference/datamodel.html#notes-on-using-slots\n\n\u003e The action of a __slots__ declaration is not limited to the class where it is defined. __slots__ declared in parents are available in child classes. However, child subclasses will get a __dict__ and __weakref__ unless they also define __slots__ (which should only contain names of any additional slots).\n\n(It\u0027s that last bit that seems most relevant).\n\n*BUT* ...\n\nsqlite3.Connection doesn\u0027t actually have __slots__. So I guess this is also relevant:\n\n\u003e When inheriting from a class without __slots__, the __dict__ and __weakref__ attribute of the instances will always be accessible.\n\nI think the trick is that by declaring __slots__, I force the __dict__ to be created a little more pro-actively following https://github.com/python/cpython/commit/a8b9350964f43cb648c98c179c8037fbf3ff8a7d ? IDK man.","commit_id":"71ebbcc3661580e594bdcf1e5df8c5083ab61015"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0aee80e3e257bb04015b058e3b710d982e463f41","unresolved":true,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"class GreenDBCursor(sqlite3.Cursor):"},{"line_number":154,"context_line":"    \"\"\"SQLite Cursor handler that plays well with eventlet.\"\"\""},{"line_number":155,"context_line":"    __slots__ \u003d (\u0027timeout\u0027, \u0027db_file\u0027)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":158,"context_line":"        self.timeout \u003d args[0].timeout"}],"source_content_type":"text/x-python","patch_set":1,"id":"8e2c7e9e_814ba52e","line":155,"updated":"2022-11-29 18:43:59.000000000","message":"is this even *reasonable* - sqlite3.Cursor doesn\u0027t have any other attributes?","commit_id":"71ebbcc3661580e594bdcf1e5df8c5083ab61015"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e9f1c6a4cb4a8193afd306ee770c04e102c5b2f2","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"class GreenDBCursor(sqlite3.Cursor):"},{"line_number":154,"context_line":"    \"\"\"SQLite Cursor handler that plays well with eventlet.\"\"\""},{"line_number":155,"context_line":"    __slots__ \u003d (\u0027timeout\u0027, \u0027db_file\u0027)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":158,"context_line":"        self.timeout \u003d args[0].timeout"}],"source_content_type":"text/x-python","patch_set":1,"id":"df46fd84_274e8b31","line":155,"in_reply_to":"8e2c7e9e_814ba52e","updated":"2022-11-29 21:38:03.000000000","message":"All the stuff above about sqlite3.Connection applies to sqlite3.Cursor too.","commit_id":"71ebbcc3661580e594bdcf1e5df8c5083ab61015"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0aee80e3e257bb04015b058e3b710d982e463f41","unresolved":true,"context_lines":[{"line_number":155,"context_line":"    __slots__ \u003d (\u0027timeout\u0027, \u0027db_file\u0027)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":158,"context_line":"        self.timeout \u003d args[0].timeout"},{"line_number":159,"context_line":"        self.db_file \u003d args[0].db_file"},{"line_number":160,"context_line":"        super(GreenDBCursor, self).__init__(*args, **kwargs)"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"11677acb_d915f0f6","line":158,"updated":"2022-11-29 18:43:59.000000000","message":"args[0].timeout - what even is this first agrument?  the connection?","commit_id":"71ebbcc3661580e594bdcf1e5df8c5083ab61015"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e9f1c6a4cb4a8193afd306ee770c04e102c5b2f2","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    __slots__ \u003d (\u0027timeout\u0027, \u0027db_file\u0027)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":158,"context_line":"        self.timeout \u003d args[0].timeout"},{"line_number":159,"context_line":"        self.db_file \u003d args[0].db_file"},{"line_number":160,"context_line":"        super(GreenDBCursor, self).__init__(*args, **kwargs)"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"02ea6dd3_01a5a032","line":158,"in_reply_to":"11677acb_d915f0f6","updated":"2022-11-29 21:38:03.000000000","message":"Yup.","commit_id":"71ebbcc3661580e594bdcf1e5df8c5083ab61015"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8562692d47f9bc6fc451965f2bd67a6c8bc245a3","unresolved":true,"context_lines":[{"line_number":582,"context_line":"        try:"},{"line_number":583,"context_line":"            yield True"},{"line_number":584,"context_line":"        except (Exception, Timeout):"},{"line_number":585,"context_line":"            pass"},{"line_number":586,"context_line":"        try:"},{"line_number":587,"context_line":"            conn.execute(\u0027ROLLBACK\u0027)"},{"line_number":588,"context_line":"            conn.isolation_level \u003d orig_isolation_level"}],"source_content_type":"text/x-python","patch_set":2,"id":"60066a27_018ce8c3","side":"PARENT","line":585,"updated":"2022-11-30 22:11:04.000000000","message":"This seems suspicious as hell -- I\u0027m amazed our tests passed before :-/","commit_id":"a1939cba037926400cd777059ee511481916cb08"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9da85f2b033fc36c14eabca1e91c359a3a0735b9","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        try:"},{"line_number":583,"context_line":"            yield True"},{"line_number":584,"context_line":"        except (Exception, Timeout):"},{"line_number":585,"context_line":"            pass"},{"line_number":586,"context_line":"        try:"},{"line_number":587,"context_line":"            conn.execute(\u0027ROLLBACK\u0027)"},{"line_number":588,"context_line":"            conn.isolation_level \u003d orig_isolation_level"}],"source_content_type":"text/x-python","patch_set":2,"id":"049bc1c9_252c4e11","side":"PARENT","line":585,"in_reply_to":"60066a27_018ce8c3","updated":"2022-12-05 22:46:32.000000000","message":"Done","commit_id":"a1939cba037926400cd777059ee511481916cb08"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8562692d47f9bc6fc451965f2bd67a6c8bc245a3","unresolved":true,"context_lines":[{"line_number":144,"context_line":"            cls \u003d GreenDBCursor"},{"line_number":145,"context_line":"        return sqlite3.Connection.cursor(self, cls)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":148,"context_line":"        return _db_timeout("},{"line_number":149,"context_line":"            self.timeout, self.db_file, lambda: sqlite3.Connection.execute("},{"line_number":150,"context_line":"                self, *args, **kwargs))"}],"source_content_type":"text/x-python","patch_set":2,"id":"356b0629_05103c11","line":147,"updated":"2022-11-30 22:11:04.000000000","message":"This might be necessary even once cpython fixes their bug.","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9da85f2b033fc36c14eabca1e91c359a3a0735b9","unresolved":true,"context_lines":[{"line_number":144,"context_line":"            cls \u003d GreenDBCursor"},{"line_number":145,"context_line":"        return sqlite3.Connection.cursor(self, cls)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":148,"context_line":"        return _db_timeout("},{"line_number":149,"context_line":"            self.timeout, self.db_file, lambda: sqlite3.Connection.execute("},{"line_number":150,"context_line":"                self, *args, **kwargs))"}],"source_content_type":"text/x-python","patch_set":2,"id":"fdb055ee_c303f42b","line":147,"in_reply_to":"356b0629_05103c11","updated":"2022-12-05 22:46:32.000000000","message":"Yup; even with https://github.com/python/cpython/pull/99902 to fix the segfault, I trip failures like https://paste.opendev.org/show/banhZYFaECxovH58l8FQ/ -- presumably because upstream\u0027s execute() no longer calls cursor()\n\nPresumably we want something similar for executescript()?","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c9750fcdbef207584263fbfad4b6aa066db15541","unresolved":true,"context_lines":[{"line_number":144,"context_line":"            cls \u003d GreenDBCursor"},{"line_number":145,"context_line":"        return sqlite3.Connection.cursor(self, cls)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":148,"context_line":"        return _db_timeout("},{"line_number":149,"context_line":"            self.timeout, self.db_file, lambda: sqlite3.Connection.execute("},{"line_number":150,"context_line":"                self, *args, **kwargs))"}],"source_content_type":"text/x-python","patch_set":2,"id":"db09bdbf_72c46889","line":147,"in_reply_to":"fdb055ee_c303f42b","updated":"2022-12-07 22:04:09.000000000","message":"\u003e Presumably we want something similar for executescript()?\n\nI\u0027m less and less sure of this -- I think maybe there\u0027s not actually any expectation that executescript be greened...","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c14cd5bea8ccee285f0d2a39b1618dd92b91a432","unresolved":true,"context_lines":[{"line_number":147,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":148,"context_line":"        return _db_timeout("},{"line_number":149,"context_line":"            self.timeout, self.db_file, lambda: sqlite3.Connection.execute("},{"line_number":150,"context_line":"                self, *args, **kwargs))"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def commit(self):"},{"line_number":153,"context_line":"        return _db_timeout("}],"source_content_type":"text/x-python","patch_set":2,"id":"343924d5_98eea426","line":150,"updated":"2023-06-09 13:00:59.000000000","message":"I verified that with py3.11.1 execute does not delegate to the cursor() method. Also notice that since ~3.9 the docs for Connection.execute no longer state that it calls cursor() to make a Cursor.","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"221ce6d38d7d401cb9597499ce3bd2ec9d2e1d48","unresolved":true,"context_lines":[{"line_number":147,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":148,"context_line":"        return _db_timeout("},{"line_number":149,"context_line":"            self.timeout, self.db_file, lambda: sqlite3.Connection.execute("},{"line_number":150,"context_line":"                self, *args, **kwargs))"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def commit(self):"},{"line_number":153,"context_line":"        return _db_timeout("}],"source_content_type":"text/x-python","patch_set":2,"id":"de2e1cec_d957cb5b","line":150,"in_reply_to":"343924d5_98eea426","updated":"2023-06-21 04:08:59.000000000","message":"Digging some more, looks like https://github.com/python/cpython/pull/31351 was the change that broke things for us, though I don\u0027t think they expected it to be a breaking change.\n\nhttps://github.com/python/cpython/pull/91643 changed those docs, but it looks like they were *just* trying to do some doc clean-up.\n\nI should maybe write another CPython issue about all this... Given https://github.com/python/cpython/issues/99886 I get the feeling that the CPython folk don\u0027t really expect anyone to ever subclass any of this stuff. (Nor work with the same DB across multiple processes/posix threads, but that\u0027s a whole *other* issue.)","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"361bd48793171d15c010e6a446211416f7bbbe86","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":148,"context_line":"        return _db_timeout("},{"line_number":149,"context_line":"            self.timeout, self.db_file, lambda: sqlite3.Connection.execute("},{"line_number":150,"context_line":"                self, *args, **kwargs))"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def commit(self):"},{"line_number":153,"context_line":"        return _db_timeout("}],"source_content_type":"text/x-python","patch_set":2,"id":"df3a1ae4_3d76e9aa","line":150,"in_reply_to":"de2e1cec_d957cb5b","updated":"2023-06-22 09:54:51.000000000","message":"Done","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"304e4b1e045afb34a7dd6dc659baca9564168980","unresolved":true,"context_lines":[{"line_number":596,"context_line":"            except (Exception, Timeout):"},{"line_number":597,"context_line":"                logging.exception("},{"line_number":598,"context_line":"                    _(\u0027Broker error trying to rollback locked connection\u0027))"},{"line_number":599,"context_line":"                conn.close()"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"    def _new_db_id(self):"},{"line_number":602,"context_line":"        device_name \u003d os.path.basename(self.get_device_path())"}],"source_content_type":"text/x-python","patch_set":2,"id":"c816c3f3_d9b22ede","line":599,"updated":"2022-11-30 23:52:49.000000000","message":"Pulled this change out as https://review.opendev.org/c/openstack/swift/+/866239","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9da85f2b033fc36c14eabca1e91c359a3a0735b9","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            except (Exception, Timeout):"},{"line_number":597,"context_line":"                logging.exception("},{"line_number":598,"context_line":"                    _(\u0027Broker error trying to rollback locked connection\u0027))"},{"line_number":599,"context_line":"                conn.close()"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"    def _new_db_id(self):"},{"line_number":602,"context_line":"        device_name \u003d os.path.basename(self.get_device_path())"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8f7678_1883be5a","line":599,"in_reply_to":"c816c3f3_d9b22ede","updated":"2022-12-05 22:46:32.000000000","message":"Done","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"}],"test/unit/account/test_backend.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8562692d47f9bc6fc451965f2bd67a6c8bc245a3","unresolved":true,"context_lines":[{"line_number":1501,"context_line":"                side_effect\u003d[orig_execute_script, Exception(\u0027kaboom!\u0027)],"},{"line_number":1502,"context_line":"            ) as mock_executescript:"},{"line_number":1503,"context_line":"                broker._commit_puts()"},{"line_number":1504,"context_line":"        except Exception:"},{"line_number":1505,"context_line":"            pass"},{"line_number":1506,"context_line":"        else:"},{"line_number":1507,"context_line":"            self.fail(\u0027mock exception was not raised\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c8f3725a_1dd30339","line":1504,"updated":"2022-11-30 22:11:04.000000000","message":"I hate how broad this is :-(","commit_id":"03eb2ac85a619e68976d30a6b4ef9560d4960f28"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c14cd5bea8ccee285f0d2a39b1618dd92b91a432","unresolved":true,"context_lines":[{"line_number":1494,"context_line":"        broker.put_container(\u0027c\u0027, next(self.ts).internal, 0, 0, 0,"},{"line_number":1495,"context_line":"                             POLICIES.default.idx)"},{"line_number":1496,"context_line":""},{"line_number":1497,"context_line":"        try:"},{"line_number":1498,"context_line":"            orig_execute_script \u003d GreenDBConnection.executescript"},{"line_number":1499,"context_line":"            with mock.patch.object("},{"line_number":1500,"context_line":"                GreenDBConnection, \u0027executescript\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ab33edd_a366f8d8","line":1497,"updated":"2023-06-09 13:00:59.000000000","message":"is this change related to the fix? the test passes when I revert db.py","commit_id":"90f8255f65e8c41b0b5079dd25aac0d7df9c858d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"221ce6d38d7d401cb9597499ce3bd2ec9d2e1d48","unresolved":true,"context_lines":[{"line_number":1494,"context_line":"        broker.put_container(\u0027c\u0027, next(self.ts).internal, 0, 0, 0,"},{"line_number":1495,"context_line":"                             POLICIES.default.idx)"},{"line_number":1496,"context_line":""},{"line_number":1497,"context_line":"        try:"},{"line_number":1498,"context_line":"            orig_execute_script \u003d GreenDBConnection.executescript"},{"line_number":1499,"context_line":"            with mock.patch.object("},{"line_number":1500,"context_line":"                GreenDBConnection, \u0027executescript\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ad79a2b7_70b54d82","line":1497,"in_reply_to":"5ab33edd_a366f8d8","updated":"2023-06-21 04:08:59.000000000","message":"No -- it was just a refactor while digging into this, though I don\u0027t remember whether I actually saw failures in here on py311. There were a couple things that stood out to me, though:\n\n- The `real_get \u003d broker.get` / `borker.get \u003d mock_get` pattern seems like *exactly* the sort of thing where we\u0027d usually use `mock.patch`\n- The `self.assertEqual(len(called), 1)` seemed very misleading","commit_id":"90f8255f65e8c41b0b5079dd25aac0d7df9c858d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2dc40014f1b002649e40fd201c110dd3dcf9125f","unresolved":true,"context_lines":[{"line_number":1507,"context_line":"            self.fail(\u0027mock exception was not raised\u0027)"},{"line_number":1508,"context_line":""},{"line_number":1509,"context_line":"        self.assertEqual(len(mock_executescript.mock_calls), 2)"},{"line_number":1510,"context_line":"        self.assertIn(\u0027CREATE TABLE policy_stat\u0027,"},{"line_number":1511,"context_line":"                      mock_executescript.mock_calls[0][1][0])"},{"line_number":1512,"context_line":""},{"line_number":1513,"context_line":"        # nothing was committed"}],"source_content_type":"text/x-python","patch_set":3,"id":"86563ad8_52501cf3","line":1510,"updated":"2022-12-09 18:49:19.000000000","message":"I\u0027m a little weirded out by how this (live, in-the-client-request-path!) migration uses executescript, which as best I can tell has never been greened... but I suppose that\u0027s always been the case?","commit_id":"90f8255f65e8c41b0b5079dd25aac0d7df9c858d"}]}
