Below is the list of changes that have just been committed into a local
5.1 repository of tomas. When tomas 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-04-23 20:30:26+02:00, tomas@stripped +3 -0
Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-telco-gca
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
MERGE: 1.2403.17.28
BitKeeper/etc/ignore@stripped, 2007-04-23 20:28:22+02:00, tomas@stripped +13 -13
auto-union
MERGE: 1.270.5.1
storage/ndb/test/tools/Makefile.am@stripped, 2007-04-23 20:30:24+02:00, tomas@stripped +2 -3
manual merge
MERGE: 1.15.2.1
storage/ndb/test/tools/listen.cpp@stripped, 2007-04-23 20:30:24+02:00, tomas@stripped +3 -3
manual merge
MERGE: 1.4.1.2
# 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: tomas
# Host: whalegate.ndb.mysql.com
# Root: /home/tomas/mysql-5.1-single-user/RESYNC
--- 1.288/BitKeeper/etc/ignore 2007-04-23 17:00:52 +02:00
+++ 1.289/BitKeeper/etc/ignore 2007-04-23 20:28:22 +02:00
@@ -2640,6 +2640,16 @@
storage/ndb/lib/libREP_API.so
storage/ndb/lib/libndbclient.so
storage/ndb/lib/libndbclient_extra.so
+storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent
+storage/ndb/ndbapi-examples/mgmapi_logevent2/mgmapi_logevent2
+storage/ndb/ndbapi-examples/ndbapi_async/ndbapi_async
+storage/ndb/ndbapi-examples/ndbapi_async1/ndbapi_async1
+storage/ndb/ndbapi-examples/ndbapi_event/ndbapi_event
+storage/ndb/ndbapi-examples/ndbapi_retries/ndbapi_retries
+storage/ndb/ndbapi-examples/ndbapi_scan/ndbapi_scan
+storage/ndb/ndbapi-examples/ndbapi_simple/ndbapi_simple
+storage/ndb/ndbapi-examples/ndbapi_simple_dual/ndbapi_simple_dual
+storage/ndb/ndbapi-examples/ndbapi_simple_index/ndbapi_simple_index
storage/ndb/src/common/debugger/libtrace.dsp
storage/ndb/src/common/debugger/signaldata/libsignaldataprint.dsp
storage/ndb/src/common/logger/liblogger.dsp
@@ -2717,6 +2727,8 @@
storage/ndb/test/ndbapi/testDeadlock
storage/ndb/test/ndbapi/testDict
storage/ndb/test/ndbapi/testIndex
+storage/ndb/test/ndbapi/testIndexStat
+storage/ndb/test/ndbapi/testInterpreter
storage/ndb/test/ndbapi/testLcp
storage/ndb/test/ndbapi/testMgm
storage/ndb/test/ndbapi/testNdbApi
@@ -2752,6 +2764,7 @@
storage/ndb/test/tools/hugoScanUpdate
storage/ndb/test/tools/listen_event
storage/ndb/test/tools/ndb_cpcc
+storage/ndb/test/tools/rep_latency
storage/ndb/test/tools/restart
storage/ndb/test/tools/verify_index
storage/ndb/tools/ndb_config
--- 1.17/storage/ndb/test/tools/Makefile.am 2007-04-10 10:30:18 +02:00
+++ 1.18/storage/ndb/test/tools/Makefile.am 2007-04-23 20:30:24 +02:00
@@ -13,7 +13,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-ndbtest_PROGRAMS = hugoLoad hugoFill hugoLockRecords hugoPkDelete hugoPkRead hugoPkReadRecord hugoPkUpdate hugoScanRead hugoScanUpdate restart verify_index copy_tab create_index ndb_cpcc listen_event eventlog
+ndbtest_PROGRAMS = hugoLoad hugoFill hugoLockRecords hugoPkDelete hugoPkRead hugoPkReadRecord hugoPkUpdate hugoScanRead hugoScanUpdate restart verify_index copy_tab create_index ndb_cpcc listen_event eventlog rep_latency
# transproxy
@@ -34,6 +34,7 @@
ndb_cpcc_SOURCES = cpcc.cpp
listen_event_SOURCES = listen.cpp
eventlog_SOURCES = log_listner.cpp
+rep_latency_SOURCES = rep_latency.cpp
include $(top_srcdir)/storage/ndb/config/common.mk.am
include $(top_srcdir)/storage/ndb/config/type_ndbapitest.mk.am
--- 1.6/storage/ndb/test/tools/listen.cpp 2007-03-14 15:39:23 +01:00
+++ 1.7/storage/ndb/test/tools/listen.cpp 2007-04-23 20:30:24 +02:00
@@ -22,6 +22,128 @@
#include <getarg.h>
+#define BATCH_SIZE 128
+struct Table_info
+{
+ Uint32 id;
+};
+
+struct Trans_arg
+{
+ Ndb *ndb;
+ NdbTransaction *trans;
+ Uint32 bytes_batched;
+};
+
+Vector< Vector<NdbRecAttr*> > event_values;
+Vector< Vector<NdbRecAttr*> > event_pre_values;
+Vector<struct Table_info> table_infos;
+
+static void do_begin(Ndb *ndb, struct Trans_arg &trans_arg)
+{
+ trans_arg.ndb = ndb;
+ trans_arg.trans = ndb->startTransaction();
+ trans_arg.bytes_batched = 0;
+}
+
+static void do_equal(NdbOperation *op,
+ NdbEventOperation *pOp)
+{
+ struct Table_info *ti = (struct Table_info *)pOp->getCustomData();
+ Vector<NdbRecAttr*> &ev = event_values[ti->id];
+ const NdbDictionary::Table *tab= pOp->getTable();
+ unsigned i, n_columns = tab->getNoOfColumns();
+ for (i= 0; i < n_columns; i++)
+ {
+ if (tab->getColumn(i)->getPrimaryKey() &&
+ op->equal(i, ev[i]->aRef()))
+ {
+ abort();
+ }
+ }
+}
+
+static void do_set_value(NdbOperation *op,
+ NdbEventOperation *pOp)
+{
+ struct Table_info *ti = (struct Table_info *)pOp->getCustomData();
+ Vector<NdbRecAttr*> &ev = event_values[ti->id];
+ const NdbDictionary::Table *tab= pOp->getTable();
+ unsigned i, n_columns = tab->getNoOfColumns();
+ for (i= 0; i < n_columns; i++)
+ {
+ if (!tab->getColumn(i)->getPrimaryKey() &&
+ op->setValue(i, ev[i]->aRef()))
+ {
+ abort();
+ }
+ }
+}
+
+static void do_insert(struct Trans_arg &trans_arg, NdbEventOperation *pOp)
+{
+ if (!trans_arg.trans)
+ return;
+
+ NdbOperation *op =
+ trans_arg.trans->getNdbOperation(pOp->getEvent()->getTableName());
+ op->writeTuple();
+
+ do_equal(op, pOp);
+ do_set_value(op, pOp);
+
+ trans_arg.bytes_batched++;
+ if (trans_arg.bytes_batched > BATCH_SIZE)
+ {
+ trans_arg.trans->execute(NdbTransaction::NoCommit);
+ trans_arg.bytes_batched = 0;
+ }
+}
+static void do_update(struct Trans_arg &trans_arg, NdbEventOperation *pOp)
+{
+ if (!trans_arg.trans)
+ return;
+
+ NdbOperation *op =
+ trans_arg.trans->getNdbOperation(pOp->getEvent()->getTableName());
+ op->writeTuple();
+
+ do_equal(op, pOp);
+ do_set_value(op, pOp);
+
+ trans_arg.bytes_batched++;
+ if (trans_arg.bytes_batched > BATCH_SIZE)
+ {
+ trans_arg.trans->execute(NdbTransaction::NoCommit);
+ trans_arg.bytes_batched = 0;
+ }
+}
+static void do_delete(struct Trans_arg &trans_arg, NdbEventOperation *pOp)
+{
+ if (!trans_arg.trans)
+ return;
+
+ NdbOperation *op =
+ trans_arg.trans->getNdbOperation(pOp->getEvent()->getTableName());
+ op->deleteTuple();
+
+ do_equal(op, pOp);
+
+ trans_arg.bytes_batched++;
+ if (trans_arg.bytes_batched > BATCH_SIZE)
+ {
+ trans_arg.trans->execute(NdbTransaction::NoCommit);
+ trans_arg.bytes_batched = 0;
+ }
+}
+static void do_commit(struct Trans_arg &trans_arg)
+{
+ if (!trans_arg.trans)
+ return;
+ trans_arg.trans->execute(NdbTransaction::Commit);
+ trans_arg.ndb->closeTransaction(trans_arg.trans);
+}
+
int
main(int argc, const char** argv){
ndb_init();
@@ -29,8 +151,14 @@
int _help = 0;
const char* db = 0;
+ const char* connectstring1 = 0;
+ const char* connectstring2 = 0;
struct getargs args[] = {
+ { "connectstring1", 'c',
+ arg_string, &connectstring1, "connectstring1", "" },
+ { "connectstring2", 'C',
+ arg_string, &connectstring2, "connectstring2", "" },
{ "database", 'd', arg_string, &db, "Database", "" },
{ "usage", '?', arg_flag, &_help, "Print help", "" }
};
@@ -46,7 +174,7 @@
}
// Connect to Ndb
- Ndb_cluster_connection con;
+ Ndb_cluster_connection con(connectstring1);
if(con.connect(12, 5, 1) != 0)
{
return NDBT_ProgramExit(NDBT_FAILED);
@@ -61,12 +189,35 @@
// Connect to Ndb and wait for it to become ready
while(MyNdb.waitUntilReady() != 0)
ndbout << "Waiting for ndb to become ready..." << endl;
-
+
+ Ndb_cluster_connection *con2 = NULL;
+ Ndb *ndb2 = NULL;
+ if (connectstring2)
+ {
+ con2 = new Ndb_cluster_connection(connectstring2);
+
+ if(con2->connect(12, 5, 1) != 0)
+ {
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+ ndb2 = new Ndb( con2, db ? db : "TEST_DB" );
+
+ if(ndb2->init() != 0){
+ ERR(ndb2->getNdbError());
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+
+ // Connect to Ndb and wait for it to become ready
+ while(ndb2->waitUntilReady() != 0)
+ ndbout << "Waiting for ndb to become ready..." << endl;
+ }
+
int result = 0;
NdbDictionary::Dictionary *myDict = MyNdb.getDictionary();
Vector<NdbDictionary::Event*> events;
Vector<NdbEventOperation*> event_ops;
+ int sz = 0;
for(i= optind; i<argc; i++)
{
const NdbDictionary::Table* table= myDict->getTable(argv[i]);
@@ -121,12 +272,23 @@
goto end;
}
+ event_values.push_back(Vector<NdbRecAttr *>());
+ event_pre_values.push_back(Vector<NdbRecAttr *>());
for (int a = 0; a < table->getNoOfColumns(); a++)
{
- pOp->getValue(table->getColumn(a)->getName());
- pOp->getPreValue(table->getColumn(a)->getName());
+ event_values[sz].
+ push_back(pOp->getValue(table->getColumn(a)->getName()));
+ event_pre_values[sz].
+ push_back(pOp->getPreValue(table->getColumn(a)->getName()));
}
event_ops.push_back(pOp);
+ {
+ struct Table_info ti;
+ ti.id = sz;
+ table_infos.push_back(ti);
+ }
+ pOp->setCustomData((void *)&table_infos[sz]);
+ sz++;
}
for(i= 0; i<(int)event_ops.size(); i++)
@@ -140,6 +302,7 @@
}
}
+ struct Trans_arg trans_arg;
while(true)
{
while(MyNdb.pollEvents(100) == 0);
@@ -149,18 +312,26 @@
{
Uint64 gci= pOp->getGCI();
Uint64 cnt_i= 0, cnt_u= 0, cnt_d= 0;
+ if (ndb2)
+ do_begin(ndb2, trans_arg);
do
{
switch(pOp->getEventType())
{
case NdbDictionary::Event::TE_INSERT:
cnt_i++;
+ if (ndb2)
+ do_insert(trans_arg, pOp);
break;
case NdbDictionary::Event::TE_DELETE:
cnt_d++;
+ if (ndb2)
+ do_delete(trans_arg, pOp);
break;
case NdbDictionary::Event::TE_UPDATE:
cnt_u++;
+ if (ndb2)
+ do_update(trans_arg, pOp);
break;
case NdbDictionary::Event::TE_CLUSTER_FAILURE:
break;
@@ -180,6 +351,8 @@
abort();
}
} while ((pOp= MyNdb.nextEvent()) && gci == pOp->getGCI());
+ if (ndb2)
+ do_commit(trans_arg);
ndbout_c("GCI: %lld events: %lld(I) %lld(U) %lld(D)", gci, cnt_i, cnt_u, cnt_d);
}
}
@@ -187,8 +360,15 @@
for(i= 0; i<(int)event_ops.size(); i++)
MyNdb.dropEventOperation(event_ops[i]);
+ if (ndb2)
+ delete ndb2;
+ if (con2)
+ delete con2;
return NDBT_ProgramExit(NDBT_OK);
}
+template class Vector<struct Table_info>;
+template class Vector<NdbRecAttr*>;
+template class Vector< Vector<NdbRecAttr*> >;
template class Vector<NdbDictionary::Event*>;
template class Vector<NdbEventOperation*>;
| Thread |
|---|
| • bk commit into 5.1 tree (tomas:1.2577) | tomas | 23 Apr |