List:Commits« Previous MessageNext Message »
From:Frazer Clement Date:October 23 2009 3:49pm
Subject:bzr commit into mysql-5.1-telco-6.2 branch (frazer:3027) Bug#45768
View as plain text  
#At file:///home/frazer/bzr/mysql-5.1-telco-6.2/

 3027 Frazer Clement	2009-10-23
      Bug#45768 : GCOV testing hits assert: NdbBlob::preCommit assert(theState == Active) 
      modified:
        mysql-test/suite/ndb/r/ndb_dd_alter.result
        mysql-test/suite/ndb/t/ndb_dd_alter.test
        storage/ndb/src/ndbapi/NdbBlob.cpp
        storage/ndb/test/ndbapi/testBlobs.cpp
        storage/ndb/test/run-test/daily-basic-tests.txt

=== modified file 'mysql-test/suite/ndb/r/ndb_dd_alter.result'
--- a/mysql-test/suite/ndb/r/ndb_dd_alter.result	2009-02-12 14:22:34 +0000
+++ b/mysql-test/suite/ndb/r/ndb_dd_alter.result	2009-10-23 15:48:55 +0000
@@ -420,6 +420,18 @@ a1	a2	a3	hex(a4)	a5	a6	a7	a8	a9	a10	a11	
 18	19.2345	20000018	0	1	23474	2006-01-01	07:04:00	1971-05-28 16:55:03	abc	abcdefg	LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL	Text Field
 19	20.2345	20000019	0	1	23475	2006-01-01	07:04:00	1971-05-28 16:55:03	abc	abcdefg	LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL	Text Field
 20	21.2345	20000020	0	1	23476	2006-01-01	07:04:00	1971-05-28 16:55:03	abc	abcdefg	LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL	Text Field
+CREATE TABLESPACE ts2
+ADD DATAFILE './table_space/datafile2.dat'
+ USE LOGFILE GROUP lg
+INITIAL_SIZE 1M
+ENGINE NDB;
+Expecting tablespace is full error
+ALTER TABLE test.t1 TABLESPACE ts2 STORAGE DISK ENGINE NDB;
+Got one of the listed errors
+ALTER TABLESPACE ts2
+DROP DATAFILE './table_space/datafile2.dat'
+ ENGINE NDB;
+DROP TABLESPACE ts2 ENGINE NDB;
 ALTER TABLE test.t1 ADD INDEX a2_i (a2), ADD INDEX a3_i (a3);
 SHOW CREATE TABLE test.t1;
 Table	Create Table

=== modified file 'mysql-test/suite/ndb/t/ndb_dd_alter.test'
--- a/mysql-test/suite/ndb/t/ndb_dd_alter.test	2007-07-04 20:38:53 +0000
+++ b/mysql-test/suite/ndb/t/ndb_dd_alter.test	2009-10-23 15:48:55 +0000
@@ -219,6 +219,27 @@ enable_query_log;
 
 SELECT a1, a2,a3,hex(a4),a5,a6,a7,a8,a9,a10,a11,a12,a13 FROM test.t1 ORDER BY a1;
 
+#### Try to move t1 into too-small tablespace ####
+# Bug #45768 
+
+ CREATE TABLESPACE ts2
+ ADD DATAFILE './table_space/datafile2.dat'
+ USE LOGFILE GROUP lg
+ INITIAL_SIZE 1M
+ ENGINE NDB;
+
+--echo Expecting tablespace is full error
+# We mention the same error twice here to suppress printing of the error
+# This is required as the error contains the temp table name which
+# varies per-run
+--error 1114,1114
+ALTER TABLE test.t1 TABLESPACE ts2 STORAGE DISK ENGINE NDB;
+
+ ALTER TABLESPACE ts2
+ DROP DATAFILE './table_space/datafile2.dat'
+ ENGINE NDB;
+ DROP TABLESPACE ts2 ENGINE NDB;
+
 #### Try to ALTER DD Tables and add Indexes
 
 ALTER TABLE test.t1 ADD INDEX a2_i (a2), ADD INDEX a3_i (a3);

=== modified file 'storage/ndb/src/ndbapi/NdbBlob.cpp'
--- a/storage/ndb/src/ndbapi/NdbBlob.cpp	2009-09-08 11:02:48 +0000
+++ b/storage/ndb/src/ndbapi/NdbBlob.cpp	2009-10-23 15:48:55 +0000
@@ -2896,6 +2896,14 @@ NdbBlob::preCommit()
   DBUG_PRINT("info", ("this=%p op=%p con=%p", this, theNdbOp, theNdbCon));
   if (theState == Invalid)
     DBUG_RETURN(-1);
+  if (unlikely((theState == Prepared) && 
+               (theNdbCon->commitStatus() == NdbTransaction::Aborted)))
+  {
+    /* execute(Commit) called after transaction aborted from kernel
+     * Do nothing here - the call will fail later.
+     */
+    DBUG_RETURN(0);
+  }
   assert(theState == Active);
   assert(isKeyOp());
   if (isInsertOp() || isUpdateOp() || isWriteOp()) {

=== modified file 'storage/ndb/test/ndbapi/testBlobs.cpp'
--- a/storage/ndb/test/ndbapi/testBlobs.cpp	2009-05-26 18:53:34 +0000
+++ b/storage/ndb/test/ndbapi/testBlobs.cpp	2009-10-23 15:48:55 +0000
@@ -173,6 +173,7 @@ printusage()
     << "  -bug 27018  middle partial part write clobbers rest of part" << endl
     << "  -bug 27370  Potential inconsistent blob reads for ReadCommitted reads" << endl
     << "  -bug 36756  Handling execute(.., abortOption) and Blobs " << endl
+    << "  -bug 45768  execute(Commit) after failing blob batch " << endl
     ;
 }
 
@@ -3013,6 +3014,129 @@ bugtest_36756()
   return 0;
 }
 
+
+static int
+bugtest_45768()
+{
+  /* Transaction inserting using blobs has an early error 
+     resulting in kernel-originated rollback.
+     Api then calls execute(Commit) which chokes on Blob
+     objects
+     
+   */
+  DBG("bugtest_45768 : Batched blob transaction with abort followed by commit");
+  
+  const int numIterations = 5;
+
+  for (int iteration=0; iteration < numIterations; iteration++)
+  {
+    /* Recalculate and insert different tuple every time to 
+     * get different keys(and therefore nodes), and
+     * different length Blobs, including zero length
+     * and NULL
+     */
+    calcTups(true);
+    
+    const Uint32 totalRows = 100; 
+    const Uint32 preExistingTupNum =  totalRows / 2;
+    
+    Tup& tupExists = g_tups[ preExistingTupNum ];
+    
+    /* Setup table with just 1 row present */
+    CHK((g_con= g_ndb->startTransaction()) != 0);
+    CHK((g_opr= g_con->getNdbOperation(g_opt.m_tname)) != 0);
+    CHK(g_opr->insertTuple() == 0);
+    CHK(g_opr->equal("PK1", tupExists.m_pk1) == 0);
+    if (g_opt.m_pk2chr.m_len != 0)
+    {
+      CHK(g_opr->equal("PK2", tupExists.m_pk2) == 0);
+      CHK(g_opr->equal("PK3", tupExists.m_pk3) == 0);
+    }
+    CHK(getBlobHandles(g_opr) == 0);
+    
+    CHK(setBlobValue(tupExists) == 0);
+    
+    CHK(g_con->execute(Commit) == 0);
+    g_con->close();
+
+    DBG("Iteration : " << iteration);
+    
+    /* Now do batched insert, including a TUP which already
+     * exists
+     */
+    int rc = 0;
+    int retries = 10;
+
+    do
+    {
+      CHK((g_con = g_ndb->startTransaction()) != 0);
+      
+      for (Uint32 tupNum = 0; tupNum < totalRows ; tupNum++)
+      {
+        Tup& tup = g_tups[ tupNum ];
+        CHK((g_opr = g_con->getNdbOperation(g_opt.m_tname)) != 0);
+        CHK(g_opr->insertTuple() == 0);
+        CHK(g_opr->equal("PK1", tup.m_pk1) == 0);
+        if (g_opt.m_pk2chr.m_len != 0)
+        {
+          CHK(g_opr->equal("PK2", tup.m_pk2) == 0);
+          CHK(g_opr->equal("PK3", tup.m_pk3) == 0);
+        }
+        
+        CHK(getBlobHandles(g_opr) == 0);
+        CHK(setBlobValue(tup) == 0);
+      }
+      
+      /* Now execute NoCommit */
+      int rc = g_con->execute(NdbTransaction::NoCommit);
+      
+      CHK(rc == -1);
+
+      if (g_con->getNdbError().code == 630)
+        break; /* Expected */
+      
+      CHK(g_con->getNdbError().code == 1218); // Send buffers overloaded
+     
+      DBG("Send Buffers overloaded, retrying");
+      sleep(1);
+      g_con->close();
+    } while (retries--);
+
+    CHK(g_con->getNdbError().code == 630);
+            
+    /* Now execute Commit */
+    rc = g_con->execute(NdbTransaction::Commit);
+
+    CHK(rc == -1);
+    /* Transaction aborted already */
+    CHK(g_con->getNdbError().code == 4350);
+
+    g_con->close();
+    
+    /* Now delete the 'existing'row */
+    CHK((g_con= g_ndb->startTransaction()) != 0);
+    CHK((g_opr= g_con->getNdbOperation(g_opt.m_tname)) != 0);
+    CHK(g_opr->deleteTuple() == 0);
+    CHK(g_opr->equal("PK1", tupExists.m_pk1) == 0);
+    if (g_opt.m_pk2chr.m_len != 0)
+    {
+      CHK(g_opr->equal("PK2", tupExists.m_pk2) == 0);
+      CHK(g_opr->equal("PK3", tupExists.m_pk3) == 0);
+    }
+
+    CHK(g_con->execute(Commit) == 0);
+    g_con->close();
+  }
+
+  g_opr= 0;
+  g_con= 0;
+  g_bh1= 0;
+
+  return 0;
+}
+
+
+
 // main
 
 // from here on print always
@@ -3842,7 +3966,8 @@ static struct {
   { 4088, bugtest_4088 },
   { 27018, bugtest_27018 },
   { 27370, bugtest_27370 },
-  { 36756, bugtest_36756 }
+  { 36756, bugtest_36756 },
+  { 45768, bugtest_45768 }
 };
 
 NDB_COMMAND(testOdbcDriver, "testBlobs", "testBlobs", "testBlobs", 65535)

=== modified file 'storage/ndb/test/run-test/daily-basic-tests.txt'
--- a/storage/ndb/test/run-test/daily-basic-tests.txt	2009-10-16 15:37:14 +0000
+++ b/storage/ndb/test/run-test/daily-basic-tests.txt	2009-10-23 15:48:55 +0000
@@ -840,6 +840,10 @@ max-time: 600
 cmd: testBlobs
 args: -bug 36756 -skip p
 
+max-time: 300
+cmd: testBlobs
+args: -bug 45768 -skip p
+
 max-time: 5000
 cmd: testOIBasic
 args: -case abcdefz

Thread
bzr commit into mysql-5.1-telco-6.2 branch (frazer:3027) Bug#45768Frazer Clement23 Oct