List:Commits« Previous MessageNext Message »
From:pekka Date:March 21 2007 8:13am
Subject:bk commit into 5.0 tree (pekka:1.2489) BUG#24028
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of pekka. When pekka does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-03-21 09:13:05+01:00, pekka@stripped +4 -0
  ndb - bug#24028 in 5.0
  proper fix exists only in version >= 5.1

  mysql-test/r/ndb_blob.result@stripped, 2007-03-21 09:10:32+01:00, pekka@stripped +2 -0
    bug#24028 in 5.0 only

  mysql-test/t/ndb_blob.test@stripped, 2007-03-21 09:10:32+01:00, pekka@stripped +5 -0
    bug#24028 in 5.0 only

  ndb/src/ndbapi/NdbBlob.cpp@stripped, 2007-03-21 09:10:32+01:00, pekka@stripped +6 -0
    bug#24028 in 5.0 only

  ndb/test/ndbapi/testBlobs.cpp@stripped, 2007-03-21 09:10:32+01:00, pekka@stripped +33 -17
    bug#24028 in 5.0 only

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	pekka
# Host:	clam.(none)
# Root:	/export/space/pekka/ndb/version/my50-bug24028

--- 1.32/ndb/test/ndbapi/testBlobs.cpp	2007-03-09 23:37:29 +01:00
+++ 1.33/ndb/test/ndbapi/testBlobs.cpp	2007-03-21 09:10:32 +01:00
@@ -123,24 +123,24 @@
     << "metadata" << endl
     << "  -pk2len N   length of PK2 [" << d.m_pk2len << "/" << g_max_pk2len <<"]" << endl
     << "  -oneblob    only 1 blob attribute [default 2]" << endl
-    << "testcases for test/skip" << endl
+    << "test cases for test/skip" << endl
     << "  k           primary key ops" << endl
     << "  i           hash index ops" << endl
     << "  s           table scans" << endl
     << "  r           ordered index scans" << endl
     << "  p           performance test" << endl
-    << "additional flags for test/skip" << endl
+    << "operations for test/skip" << endl
     << "  u           update existing blob value" << endl
     << "  n           normal insert and update" << endl
     << "  w           insert and update using writeTuple" << endl
+    << "blob operation styles for test/skip" << endl
     << "  0           getValue / setValue" << endl
     << "  1           setActiveHook" << endl
     << "  2           readData / writeData" << endl
-    << "bug tests (no blob test)" << endl
+    << "example: -test kn0 (need all 3 parts)" << endl
+    << "bug tests" << endl
     << "  -bug 4088   ndb api hang with mixed ops on index table" << endl
     << "  -bug 27018  middle partial part write clobbers rest of part" << endl
-    << "  -bug nnnn   delete + write gives 626" << endl
-    << "  -bug nnnn   acc crash on delete and long key" << endl
     ;
 }
 
@@ -1028,6 +1028,32 @@
   return 0;
 }
 
+static int
+deleteNoPk()
+{
+  DBG("--- deleteNoPk ---");
+  Tup no_tup; // bug#24028
+  no_tup.m_pk1 = 0xb1ffb1ff;
+  sprintf(no_tup.m_pk2, "%-*.*s", g_opt.m_pk2len, g_opt.m_pk2len,  "b1ffb1ff");
+  CHK((g_con = g_ndb->startTransaction()) != 0);
+  Tup& tup =  no_tup;
+  DBG("deletePk pk1=" << hex << tup.m_pk1);
+  CHK((g_opr = g_con->getNdbOperation(g_opt.m_tname)) != 0);
+  CHK(g_opr->deleteTuple() == 0);
+  CHK(g_opr->equal("PK1", tup.m_pk1) == 0);
+  if (g_opt.m_pk2len != 0)
+    CHK(g_opr->equal("PK2", tup.m_pk2) == 0);
+  CHK(g_con->execute(Commit) == -1); // fail
+  // BUG: error should be on op but is on con now
+  DBG("con: " << g_con->getNdbError());
+  DBG("opr: " << g_opr->getNdbError());
+  CHK(g_con->getNdbError().code == 626 || g_opr->getNdbError().code == 626);
+  g_ndb->closeTransaction(g_con);
+  g_opr = 0;
+  g_con = 0;
+  return 0;
+}
+
 // hash index ops
 
 static int
@@ -1383,6 +1409,7 @@
           CHK(readPk(style) == 0);
         }
         CHK(deletePk() == 0);
+        CHK(deleteNoPk() == 0);
         CHK(verifyBlob() == 0);
       }
       if (testcase('w')) {
@@ -1397,6 +1424,7 @@
           CHK(readPk(style) == 0);
         }
         CHK(deletePk() == 0);
+        CHK(deleteNoPk() == 0);
         CHK(verifyBlob() == 0);
       }
     }
@@ -1854,18 +1882,6 @@
     g_ndb->closeTransaction(g_con);
   }
 
-  return 0;
-}
-
-static int
-bugtest_2222()
-{
-  return 0;
-}
-
-static int
-bugtest_3333()
-{
   return 0;
 }
 

--- 1.19/mysql-test/r/ndb_blob.result	2006-05-21 11:01:16 +02:00
+++ 1.20/mysql-test/r/ndb_blob.result	2007-03-21 09:10:32 +01:00
@@ -76,6 +76,8 @@
 select a from t1 where d is null;
 a
 1
+delete from t1 where a=45567;
+commit;
 delete from t1 where a=1;
 delete from t1 where a=2;
 commit;

--- 1.18/mysql-test/t/ndb_blob.test	2006-05-21 11:01:16 +02:00
+++ 1.19/mysql-test/t/ndb_blob.test	2007-03-21 09:10:32 +01:00
@@ -96,6 +96,11 @@
 commit;
 select a from t1 where d is null;
 
+# bug#24028 - does not occur on MySQL level
+# bug#17986 - not seen by us anymore but could show as warning here
+delete from t1 where a=45567;
+commit;
+
 # pk delete
 delete from t1 where a=1;
 delete from t1 where a=2;

--- 1.33/ndb/src/ndbapi/NdbBlob.cpp	2007-03-09 23:37:29 +01:00
+++ 1.34/ndb/src/ndbapi/NdbBlob.cpp	2007-03-21 09:10:32 +01:00
@@ -407,6 +407,12 @@
     setErrorCode(anOp);
     DBUG_RETURN(-1);
   }
+  /*
+   * If we get no data from this op then the operation is aborted
+   * one way or other.  Following hack in 5.0 makes sure we don't read
+   * garbage.  The proper fix exists only in version >= 5.1.
+   */
+  theHead->length = 0;
   DBUG_RETURN(0);
 }
 
Thread
bk commit into 5.0 tree (pekka:1.2489) BUG#24028pekka21 Mar