List:Commits« Previous MessageNext Message »
From:Martin Skold Date:September 8 2009 2:47pm
Subject:bzr commit into mysql-5.1-telco-7.1 branch (Martin.Skold:2988) Bug#36701
Bug#40428
View as plain text  
#At file:///home/marty/MySQL/mysql-5.1-telco-7.1/

 2988 Martin Skold	2009-09-08 [merge]
      Merge
      modified:
        mysql-test/suite/ndb/t/ndb_restore.test
        sql/ha_ndbcluster.cc
        sql/ha_ndbcluster.h
        storage/ndb/include/ndbapi/NdbBlob.hpp
        storage/ndb/src/ndbapi/NdbBlob.cpp
        storage/ndb/tools/restore/Restore.cpp

=== modified file 'mysql-test/suite/ndb/t/ndb_restore.test'
--- a/mysql-test/suite/ndb/t/ndb_restore.test	2009-04-09 15:25:11 +0000
+++ b/mysql-test/suite/ndb/t/ndb_restore.test	2009-09-08 12:10:53 +0000
@@ -477,3 +477,13 @@ select epoch from mysql.ndb_apply_status
 # should evaluate to true == 1
 select epoch > (1 << 32) from mysql.ndb_apply_status where server_id=0;
 
+#
+# Bug#40428 core dumped when restore backup log file(redo log)
+#
+--exec $NDB_RESTORE --print --print_meta -b 1 -n 1 $MYSQL_TEST_DIR/std_data/ndb_backup50
>> $NDB_TOOLS_OUTPUT
+
+#
+# Bug #33040 ndb_restore crashes with --print_log
+#
+--exec $NDB_RESTORE --print_log -b 1 -n 1 $MYSQL_TEST_DIR/std_data/ndb_backup50 >>
$NDB_TOOLS_OUTPUT
+

=== modified file 'sql/ha_ndbcluster.cc'
--- a/sql/ha_ndbcluster.cc	2009-09-04 11:39:37 +0000
+++ b/sql/ha_ndbcluster.cc	2009-09-08 12:46:52 +0000
@@ -1499,6 +1499,19 @@ bool ha_ndbcluster::uses_blob_value(cons
   return FALSE;
 }
 
+void ha_ndbcluster::release_blobs_buffer()
+{
+  DBUG_ENTER("releaseBlobsBuffer");
+  if (m_blob_total_size > 0)
+  {
+    DBUG_PRINT("info", ("Deleting blobs buffer, size %llu", m_blob_total_size));
+    my_free(m_blobs_buffer, MYF(MY_ALLOW_ZERO_PTR));
+    m_blobs_buffer= 0;
+    m_blob_total_size= 0;
+    m_blobs_buffer_size= 0;
+  }
+  DBUG_VOID_RETURN;
+}
 
 /**
   Get metadata for this table from NDB.
@@ -6034,6 +6047,7 @@ int ha_ndbcluster::init_handler_for_stat
   // Start of transaction
   m_rows_changed= 0;
   m_blobs_pending= FALSE;
+  release_blobs_buffer();
   m_slow_path= m_thd_ndb->m_slow_path;
 #ifdef HAVE_NDB_BINLOG
   if (unlikely(m_slow_path))
@@ -8397,6 +8411,7 @@ ha_ndbcluster::ha_ndbcluster(handlerton 
   m_update_cannot_batch(FALSE),
   m_skip_auto_increment(TRUE),
   m_blobs_pending(0),
+  m_blob_total_size(0),
   m_blobs_buffer(0),
   m_blobs_buffer_size(0),
   m_dupkey((uint) -1),
@@ -8449,8 +8464,7 @@ ha_ndbcluster::~ha_ndbcluster() 
     free_share(&m_share);
   }
   release_metadata(thd, ndb);
-  my_free(m_blobs_buffer, MYF(MY_ALLOW_ZERO_PTR));
-  m_blobs_buffer= 0;
+  release_blobs_buffer();
 
   // Check for open cursor/transaction
   DBUG_ASSERT(m_active_cursor == NULL);

=== modified file 'sql/ha_ndbcluster.h'
--- a/sql/ha_ndbcluster.h	2009-06-10 14:30:06 +0000
+++ b/sql/ha_ndbcluster.h	2009-09-08 12:46:52 +0000
@@ -700,6 +700,7 @@ private:
   int set_blob_values(const NdbOperation *ndb_op, my_ptrdiff_t row_offset,
                       const MY_BITMAP *bitmap, uint *set_count, bool batch);
   friend int g_get_ndb_blobs_value(NdbBlob *ndb_blob, void *arg);
+  void release_blobs_buffer();
   Uint32 setup_get_hidden_fields(NdbOperation::GetValueSpec gets[2]);
   void get_hidden_fields_keyop(NdbOperation::OperationOptions *options,
                                NdbOperation::GetValueSpec gets[2]);

=== modified file 'storage/ndb/include/ndbapi/NdbBlob.hpp'
--- a/storage/ndb/include/ndbapi/NdbBlob.hpp	2009-06-15 07:42:02 +0000
+++ b/storage/ndb/include/ndbapi/NdbBlob.hpp	2009-09-08 11:24:40 +0000
@@ -369,6 +369,7 @@ private:
     Buf();
     ~Buf();
     void alloc(unsigned n);
+    void release();
     void zerorest();
     void copyfrom(const Buf& src);
   };

=== modified file 'storage/ndb/src/ndbapi/NdbBlob.cpp'
--- a/storage/ndb/src/ndbapi/NdbBlob.cpp	2009-05-29 06:23:51 +0000
+++ b/storage/ndb/src/ndbapi/NdbBlob.cpp	2009-09-08 12:10:53 +0000
@@ -357,6 +357,13 @@ NdbBlob::init()
 void
 NdbBlob::release()
 {
+  theKeyBuf.release();
+  theAccessKeyBuf.release();
+  thePackKeyBuf.release();
+  theHeadInlineBuf.release();
+  theHeadInlineCopyBuf.release();
+  thePartBuf.release();
+  theBlobEventDataBuf.release();
   setState(Idle);
 }
 
@@ -392,6 +399,16 @@ NdbBlob::Buf::alloc(unsigned n)
 }
 
 void
+NdbBlob::Buf::release()
+{
+  if (data)
+    delete [] data;
+  data = NULL;
+  size = 0;
+  maxsize = 0;
+}
+
+void
 NdbBlob::Buf::zerorest()
 {
   assert(size <= maxsize);

=== modified file 'storage/ndb/tools/restore/Restore.cpp'
--- a/storage/ndb/tools/restore/Restore.cpp	2009-08-18 13:41:52 +0000
+++ b/storage/ndb/tools/restore/Restore.cpp	2009-09-08 12:46:52 +0000
@@ -1957,7 +1957,9 @@ operator<<(NdbOut& ndbout, const Attribu
   
   NdbRecAttr tmprec(0);
   tmprec.setup(desc.m_column, 0);
-  tmprec.receive_data((Uint32*)data.void_value, data.size);
+  Uint32 length = (desc.size)/8 * (desc.arraySize);
+  tmprec.receive_data((Uint32*)data.void_value, length);
+
   ndbrecattr_print_formatted(ndbout, tmprec, g_ndbrecord_print_format);
 
   return ndbout;

Thread
bzr commit into mysql-5.1-telco-7.1 branch (Martin.Skold:2988) Bug#36701Bug#40428Martin Skold8 Sep 2009