[Checkins] SVN: relstorage/trunk/relstorage/ Added code that detects a MySQL 5.1.23 bug before it propagates

Shane Hathaway shane at hathawaymix.org
Fri Apr 18 18:56:53 EDT 2008


Log message for revision 85480:
  Added code that detects a MySQL 5.1.23 bug before it propagates
  

Changed:
  U   relstorage/trunk/relstorage/adapters/common.py
  U   relstorage/trunk/relstorage/tests/testmysql.py

-=-
Modified: relstorage/trunk/relstorage/adapters/common.py
===================================================================
--- relstorage/trunk/relstorage/adapters/common.py	2008-04-18 22:30:04 UTC (rev 85479)
+++ relstorage/trunk/relstorage/adapters/common.py	2008-04-18 22:56:53 UTC (rev 85480)
@@ -20,7 +20,9 @@
 
 log = logging.getLogger("relstorage.adapters.common")
 
+verify_sane_database = False
 
+
 # Notes about adapters:
 #
 # An adapter must not hold a connection, cursor, or database state, because
@@ -512,12 +514,25 @@
                 AND keep_tid IS NULL;
 
             UPDATE pack_object SET keep_tid = (""" + subselect + """)
-            WHERE keep = %(TRUE)s AND keep_tid IS NULL;
-
-            SELECT COUNT(1) FROM temp_pack_visit
+            WHERE keep = %(TRUE)s
+                AND keep_tid IS NULL
             """
             self._run_script(cursor, stmt, {'pack_tid': pack_tid})
-            visit_count = cursor.fetchone()[0]
+            visit_count = cursor.rowcount
+
+            if verify_sane_database:
+                # Verify the update actually worked.
+                # MySQL 5.1.23 fails this test; 5.1.24 passes.
+                stmt = """
+                SELECT 1
+                FROM pack_object
+                WHERE keep = %(TRUE)s AND keep_tid IS NULL
+                """
+                self._run_script_stmt(cursor, stmt)
+                if list(cursor):
+                    raise AssertionError(
+                        "database failed to update pack_object")
+
             log.debug("pre_pack: checking references from %d object(s)",
                 visit_count)
 

Modified: relstorage/trunk/relstorage/tests/testmysql.py
===================================================================
--- relstorage/trunk/relstorage/tests/testmysql.py	2008-04-18 22:30:04 UTC (rev 85479)
+++ relstorage/trunk/relstorage/tests/testmysql.py	2008-04-18 22:56:53 UTC (rev 85480)
@@ -42,5 +42,5 @@
 
 if __name__=='__main__':
     logging.basicConfig()
+    #logging.getLogger().setLevel(logging.DEBUG)
     unittest.main(defaultTest="test_suite")
-



More information about the Checkins mailing list