1 message in com.mysql.lists.ndb-connectorsRev 225: Merged changes from devel fo...
FromSent OnAttachments
Monty Taylor14 Nov 2007 12:28 
Subject:Rev 225: Merged changes from devel for Async problem in http://bazaar.launchpad.net/~ndb-connectors/ndb-connectors/telco-6.3
From:Monty Taylor (mtay@mysql.com)
Date:11/14/2007 12:28:43 PM
List:com.mysql.lists.ndb-connectors

At http://bazaar.launchpad.net/~ndb-connectors/ndb-connectors/telco-6.3

------------------------------------------------------------ revno: 225 revision-id: mtay@mysql.com-20071114202835-qnjrc041r5mvkgqk parent: mtay@mysql.com-20071114182601-rx7dagfrsxgvf9m0 parent: mtay@mysql.com-20071114201939-aj37y295hq05xcvk committer: Monty Taylor <mtay@mysql.com> branch nick: telco-6.3 timestamp: Wed 2007-11-14 12:28:35 -0800 message: Merged changes from devel for Async problem added: java/testsuite/ndbj/OutOfConnectionProblemTest.java
outofconnectionprobl-20071114201416-ycjx0i6uz5umawy0-1 modified: java/com/mysql/cluster/ndbj/BaseCallback.java
indbcallable.java-20070913212805-mw0t23qijtyjad85-1 java/com/mysql/cluster/ndbj/examples/TestAsync.java
testasync.java-20070703002120-jsnz1ul38pp1h3w3-1 java/com/mysql/cluster/ndbj/examples/TestBaseCallback.java
testbasecallback.jav-20070703002120-jsnz1ul38pp1h3w3-2 java/testsuite/TestCallback.java
testcallback.java-20071025000621-gt2wugdvy68mjae6-1 java/testsuite/ndbj/ImmediatePollTimeoutTest.java
immediatepolltimeout-20071030180642-3bfrv97t3q8mc2m6-1 java/testsuite/ndbj/MultipleAsyncTest.java
multipleasynctest.ja-20071025000638-1e8odqpjivvkiwt4-1 java/testsuite/ndbj/QuickAsyncTest.java
quickasynctest.java-20071024021835-88iqvmlfhmy1basb-1 java/testsuite/ndbj/QuickBFTest.java
quickbftest.java-20071101143506-knxv9uo02grm6jx8-1 ------------------------------------------------------------ revno: 192.1.25.1.34 revision-id: mtay@mysql.com-20071114201939-aj37y295hq05xcvk parent: mtay@mysql.com-20071114201308-hurnhivqmglc83bv committer: Monty Taylor <mtay@mysql.com> branch nick: devel timestamp: Wed 2007-11-14 12:19:39 -0800 message: Added OutofConnectionProblemTest to testsuite. added: java/testsuite/ndbj/OutOfConnectionProblemTest.java
outofconnectionprobl-20071114201416-ycjx0i6uz5umawy0-1 ------------------------------------------------------------ revno: 192.1.25.1.33 revision-id: mtay@mysql.com-20071114201308-hurnhivqmglc83bv parent: mtay@mysql.com-20071114180716-4mdp0qtc1njxc37s committer: Monty Taylor <mtay@mysql.com> branch nick: devel timestamp: Wed 2007-11-14 12:13:08 -0800 message: Changed BaseCallback to store the NdbTransaction object. Added getNdbError to BaseCallback. modified: java/com/mysql/cluster/ndbj/BaseCallback.java
indbcallable.java-20070913212805-mw0t23qijtyjad85-1 java/com/mysql/cluster/ndbj/examples/TestAsync.java
testasync.java-20070703002120-jsnz1ul38pp1h3w3-1 java/com/mysql/cluster/ndbj/examples/TestBaseCallback.java
testbasecallback.jav-20070703002120-jsnz1ul38pp1h3w3-2 java/testsuite/TestCallback.java
testcallback.java-20071025000621-gt2wugdvy68mjae6-1 java/testsuite/ndbj/ImmediatePollTimeoutTest.java
immediatepolltimeout-20071030180642-3bfrv97t3q8mc2m6-1 java/testsuite/ndbj/MultipleAsyncTest.java
multipleasynctest.ja-20071025000638-1e8odqpjivvkiwt4-1 java/testsuite/ndbj/QuickAsyncTest.java
quickasynctest.java-20071024021835-88iqvmlfhmy1basb-1 java/testsuite/ndbj/QuickBFTest.java
quickbftest.java-20071101143506-knxv9uo02grm6jx8-1 === added file 'java/testsuite/ndbj/OutOfConnectionProblemTest.java' --- a/java/testsuite/ndbj/OutOfConnectionProblemTest.java 1970-01-01 00:00:00
+0000 +++ b/java/testsuite/ndbj/OutOfConnectionProblemTest.java 2007-11-14 20:19:39
+0000 @@ -0,0 +1,183 @@ +package testsuite.ndbj; + +import java.util.*; +import java.sql.Timestamp; +import testsuite.BaseNdbjTestCase; +import com.mysql.cluster.ndbj.*; + +public class OutOfConnectionProblemTest extends BaseNdbjTestCase { + + static boolean alreadySetUp = false; + +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // GENERAL STUFF +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + static final int NUMBER_OF_TEST_ITERATIONS = 10000; + + static final int NUMBER_OF_ELEMENT_INSERTIONS = 25; + + static final int NUM_TRANSACTIONS = 5; + static final int TRANSACTIONS_TIMEOUT = 1; + static final int FORCE_SEND = 1; + +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // TABLE METADATA +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + static final String PROBTABLE = "OutOfConnectionProblemTable"; + + static int PROBTABLE_FIELD1; + +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // OTHER +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + static int myTransactionCount = 0; + static int myTotalTransactionCount = 0; + +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // INITIALISATION CODE +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + public static void main(String[] args) { + junit.textui.TestRunner.run(OutOfConnectionProblemTest.class); + } + + public OutOfConnectionProblemTest(String arg0) { + super(arg0); + } + + public void setUp() throws Exception { + super.setUp(); + + if (!alreadySetUp) { + // Create required tables + + createTable(PROBTABLE, "(field1 SMALLINT UNSIGNED NOT NULL, PRIMARY
KEY(field1)) ENGINE=ndb PARTITION BY KEY (field1);"); + + NdbDictionary dictionary = ndb.getDictionary(); + + NdbTable probTable = dictionary.getTable(PROBTABLE); + PROBTABLE_FIELD1 = probTable.getColumn("field1").getColumnNo(); + } + } + + public void tearDown() throws Exception { + super.tearDown(); + } + +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // TEST CODE +
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + public void testOperation() { + + try { + long startTime = System.currentTimeMillis(); + + for (int iteration = 0; + iteration < NUMBER_OF_TEST_ITERATIONS; + iteration++) { + generateRequestTxs(iteration); + + sendPollNdb(TRANSACTIONS_TIMEOUT, NUM_TRANSACTIONS, FORCE_SEND); + } + + System.out.println("Performing cooldown"); + + pollNdb(100000, myTransactionCount); + + long endTime = System.currentTimeMillis(); + long elapsedTime = endTime - startTime; + + System.out.println("Test completed with no exceptions and took " +
elapsedTime / 1000 + " seconds"); + } + catch (NdbApiException e) { + System.out.println("Caught NdbApiException in Insert:\t" + e.getMessage()); + e.printStackTrace(); + assertFalse(true); + } + finally { + System.out.println("End of test."); + } + } + + public void generateRequestTxs(int theLastBatch) throws NdbApiException { + + boolean success = false; + + NdbOperation orderOp; + BaseCallback callback; + + try { + + for (int elementCount = 1; + elementCount < (NUMBER_OF_ELEMENT_INSERTIONS) + 1; + elementCount++) { + + int id = (NUMBER_OF_ELEMENT_INSERTIONS * theLastBatch) + elementCount; + + trans = startCountedTransaction(); + + orderOp = trans.getNdbOperation(PROBTABLE); + + orderOp.insertTuple(); + + orderOp.equalInt(PROBTABLE_FIELD1, id); + + callback = new CountingCallback(id, ndb, orderOp.resultData(), trans); + + trans.executeAsynchPrepare(ExecType.Commit, + callback, + AbortOption.AbortOnError); + } + + + success = true; + } + finally { +System.out.println("Started " + myTotalTransactionCount + " txs in total " +
(success ? "(no errors)" : "(errors, aborting)")); + } + } + + private NdbTransaction startCountedTransaction() throws NdbApiException { + myTransactionCount++; + myTotalTransactionCount++; + + return ndb.startTransaction(); + } + + private int sendPollNdb(int aMillisecondNumber, int minNoOfEventsToWakeup, int
forceSend) throws NdbApiException { + ndb.sendPreparedTransactions(forceSend); + + return pollNdb(aMillisecondNumber, minNoOfEventsToWakeup); + } + + private int pollNdb(int aMillisecondNumber, int minNoOfEventsToWakeup) throws
NdbApiException { + int numberOfCallbacks = ndb.pollNdb(aMillisecondNumber,
minNoOfEventsToWakeup); + + System.out.println("Poll produced " + numberOfCallbacks + " callbacks (" +
myTransactionCount + + " txs outstanding) [Total " + myTotalTransactionCount +
"]"); + + return numberOfCallbacks; + } + + class CountingCallback extends BaseCallback { + + public CountingCallback(int theCallbackNum, Ndb theNdb, NdbResultSet
theResults, NdbTransaction trans) { + super(trans); + } + + public void callback(int theResult) { + myTransactionCount--; + //System.out.print("Callback (" + theTrans + "): "); + + //System.out.print("Transaction was " + (theTrans.isClosed() ? "closed" :
"open") + " (before close()) " ); + theTrans.close(); + //System.out.println("and is now " + (theTrans.isClosed() ? "closed" :
"open") ); + } + + } + +}

=== modified file 'java/com/mysql/cluster/ndbj/BaseCallback.java' --- a/java/com/mysql/cluster/ndbj/BaseCallback.java 2007-10-31 16:49:20 +0000 +++ b/java/com/mysql/cluster/ndbj/BaseCallback.java 2007-11-14 20:28:35 +0000 @@ -7,24 +7,36 @@ private long create_time; private long start_time; private long end_time; + protected NdbTransaction theTrans = null;

- public BaseCallback() { + public BaseCallback(NdbTransaction trans) { create_time = 0; start_time = 0; end_time = 0; + theTrans=trans; }

protected final void jni_call_callback(int result, long transPtr, long
create_time) { this.create_time = create_time; this.start_time = this.getMicroTime(); - NdbTransactionImpl theTrans = new NdbTransactionImpl(transPtr,false); - this.callback(result,theTrans); - theTrans.close(); + + if (((NdbTransactionImpl)theTrans).getCPtr((NdbTransactionImpl)theTrans) ==
transPtr) { + this.callback(result);//),new NdbTransactionImpl(transPtr,false)); + } else { + // Something is horrible wrong! The transaction we were passed is not the
same as the + // transaction we are storing. TODO: How do we deal with this? + this.callback(result); + } this.end_time = this.getMicroTime(); }; - - public void callback(int result, NdbTransaction myTrans) {} - + + public void callback(int result) {} + + //public void callback(int result, NdbTransaction myTrans) {} + + public final NdbError getNdbError() { + return ((NdbTransactionImpl)theTrans).getNdbError(); + } public final long getMicroTime() { return ndbjJNI.getMicroTime(); }

=== modified file 'java/com/mysql/cluster/ndbj/examples/TestAsync.java' --- a/java/com/mysql/cluster/ndbj/examples/TestAsync.java 2007-10-30 08:55:54
+0000 +++ b/java/com/mysql/cluster/ndbj/examples/TestAsync.java 2007-11-14 20:13:08
+0000 @@ -236,7 +236,7 @@ myOper.getValue("ATTR2");

rs = myOper.resultData(); - TestBaseCallback cb = new TestBaseCallback(myNdb,rs); + TestBaseCallback cb = new TestBaseCallback(myNdb,myTrans,rs);

myTrans.executeAsynchPrepare(ExecType.Commit, cb,
AbortOption.AbortOnError); cbs.add(cb);

=== modified file 'java/com/mysql/cluster/ndbj/examples/TestBaseCallback.java' --- a/java/com/mysql/cluster/ndbj/examples/TestBaseCallback.java 2007-09-14
10:08:14 +0000 +++ b/java/com/mysql/cluster/ndbj/examples/TestBaseCallback.java 2007-11-14
20:13:08 +0000 @@ -10,12 +10,13 @@ NdbResultSet myRs; Ndb myNdb;

- public TestBaseCallback(Ndb theNdb, NdbResultSet theRs) { - this.myRs=theRs; - this.myNdb=theNdb; + public TestBaseCallback(Ndb theNdb, NdbTransaction theTrans, NdbResultSet
theRs) { + super(theTrans); + this.myRs=theRs; + this.myNdb=theNdb; }

- public void callback(int result, NdbTransaction myTrans) { + public void callback(int result) { //System.out.println("result " + result + " value: " +
this.myRs.getInt("ATTR)); try { System.out.println("value " + this.myRs.getInt("ATTR2"));

=== modified file 'java/testsuite/TestCallback.java' --- a/java/testsuite/TestCallback.java 2007-10-25 00:10:47 +0000 +++ b/java/testsuite/TestCallback.java 2007-11-14 20:13:08 +0000 @@ -13,30 +13,26 @@ NdbResultSet myResults; String myTablename = "";

- public TestCallback(String tablename, int theCallbackNum, Ndb theNdb,
NdbResultSet theResults) { + public TestCallback(String tablename, int theCallbackNum, Ndb theNdb,
NdbTransaction theTrans, NdbResultSet theResults) { + super(theTrans); myCallbackNum = theCallbackNum; myNdb = theNdb; myResults = theResults; myTablename = tablename; }

- public TestCallback(int theCallbackNum, Ndb theNdb, NdbResultSet theResults)
{ + public TestCallback(int theCallbackNum, Ndb theNdb, NdbTransaction theTrans,
NdbResultSet theResults) { + super(theTrans); myCallbackNum = theCallbackNum; myNdb = theNdb; myResults = theResults; }

- public void callback(int result, NdbTransaction myTrans) { + public void callback(int result) { System.out.println("Finished " + myTablename + " " + myCallbackNum); junit.framework.Assert.assertTrue(true); - myTrans.close(); + theTrans.close(); }

- public void callback(int res, NdbTransactionImpl trans) { // TEMPORARY
REPLACEMENT FOR ABOVE - System.out.println("Finished " + myTablename + " " + myCallbackNum); - junit.framework.Assert.assertTrue(true); - - trans.close(); - }

}

=== modified file 'java/testsuite/ndbj/ImmediatePollTimeoutTest.java' --- a/java/testsuite/ndbj/ImmediatePollTimeoutTest.java 2007-10-30 18:06:46
+0000 +++ b/java/testsuite/ndbj/ImmediatePollTimeoutTest.java 2007-11-14 20:13:08
+0000 @@ -97,7 +97,7 @@ orderOp.equalInt("ATTR1", id); orderOp.setInt("ATTR2", id);

- callback = new MyCallback(hash, id, ndb, orderOp.resultData()); + callback = new MyCallback(hash, id, ndb, trans, orderOp.resultData()); hash.put(callback.hashCode(), callback);

trans.executeAsynchPrepare(ExecType.Commit, @@ -150,18 +150,19 @@ NdbResultSet myResults; HashMap<Integer, BaseCallback> myMap;

- public HashCallback(HashMap<Integer, BaseCallback> theMap, int
theCallbackNum, Ndb theNdb, NdbResultSet theResults) { - myMap = theMap; - myCallbackNum = theCallbackNum; - myNdb = theNdb; - myResults = theResults; + public HashCallback(HashMap<Integer, BaseCallback> theMap, int
theCallbackNum, Ndb theNdb, NdbTransaction theTrans, NdbResultSet theResults) { + super(theTrans); + myMap = theMap; + myCallbackNum = theCallbackNum; + myNdb = theNdb; + myResults = theResults; }

- public void callback(int res, NdbTransactionImpl trans) { + public void callback(int res) {

if (res!=0)
System.out.println("HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHASSSSSSSSSSSSSSSSSSSSHHH");

- trans.close(); + theTrans.close(); myMap.remove(this.hashCode());

ourCallbackCount++; @@ -171,8 +172,8 @@

class MyCallback extends HashCallback {

- public MyCallback(HashMap<Integer, BaseCallback> theMap,int
theCallbackNum, Ndb theNdb, NdbResultSet theResults) { - super(theMap, theCallbackNum, theNdb, theResults); + public MyCallback(HashMap<Integer, BaseCallback> theMap,int
theCallbackNum, Ndb theNdb, NdbTransaction theTrans, NdbResultSet theResults) { + super(theMap, theCallbackNum, theNdb, theTrans, theResults); }

}

=== modified file 'java/testsuite/ndbj/MultipleAsyncTest.java' --- a/java/testsuite/ndbj/MultipleAsyncTest.java 2007-10-25 00:10:47 +0000 +++ b/java/testsuite/ndbj/MultipleAsyncTest.java 2007-11-14 20:13:08 +0000 @@ -117,7 +117,7 @@ firstOp.setInt("ATTR2", id);

if (!USE_SYNCHRONOUS) { - callback = new TestCallback(tablename1, id, ndb, firstOp.resultData()); + callback = new TestCallback(tablename1, id, ndb, trans,
firstOp.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback, @@ -134,7 +134,7 @@ secondOp.setInt("ATTR2", id);

if (!USE_SYNCHRONOUS) { - callback = new TestCallback(tablename2, id, ndb, firstOp.resultData()); + callback = new TestCallback(tablename2, id, ndb, trans,
firstOp.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback, @@ -152,7 +152,7 @@ thirdOp.setInt("ATTR2", id);

if (!USE_SYNCHRONOUS) { - callback = new TestCallback(tablename3, id, ndb, firstOp.resultData()); + callback = new TestCallback(tablename3, id, ndb, trans,
firstOp.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback,

=== modified file 'java/testsuite/ndbj/QuickAsyncTest.java' --- a/java/testsuite/ndbj/QuickAsyncTest.java 2007-10-25 00:10:47 +0000 +++ b/java/testsuite/ndbj/QuickAsyncTest.java 2007-11-14 20:13:08 +0000 @@ -85,7 +85,7 @@

orderOp1.setInt("ATTR2", 1);

- BaseCallback callback = new TestCallback(1, ndb, orderOp1.resultData()); + BaseCallback callback = new TestCallback(1, ndb, trans,
orderOp1.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback, @@ -121,7 +121,7 @@ orderOp1.setInt("ATTR2", 1);

- BaseCallback callback = new TestCallback(1, ndb, orderOp1.resultData()); + BaseCallback callback = new TestCallback(1, ndb, trans,
orderOp1.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback, @@ -136,7 +136,7 @@

orderOp2.setInt("ATTR2", 1);

- TestCallback callback2 = new TestCallback(2, ndb, orderOp2.resultData()); + TestCallback callback2 = new TestCallback(2, ndb, trans,
orderOp2.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback2, @@ -186,7 +186,7 @@

if (!USE_SYNCHRONOUS) { - callback = new TestCallback(tablename, id, ndb, orderOp.resultData()); + callback = new TestCallback(tablename, id, ndb, trans,
orderOp.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback,

=== modified file 'java/testsuite/ndbj/QuickBFTest.java' --- a/java/testsuite/ndbj/QuickBFTest.java 2007-11-01 14:35:09 +0000 +++ b/java/testsuite/ndbj/QuickBFTest.java 2007-11-14 20:13:08 +0000 @@ -263,7 +263,7 @@ orderOp.setInt(ORDER_PRICE, id);

if (!USE_SYNCHRONOUS) { - callback = new OrderCallback(id, ndb, orderOp.resultData()); + callback = new OrderCallback(id, ndb, trans, orderOp.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback, @@ -309,7 +309,7 @@ executionOp.setInt(EXECUTION_ORDERID, id);

if (!USE_SYNCHRONOUS) { - callback = new ExecutionCallback(id, ndb, executionOp.resultData()); + callback = new ExecutionCallback(id, ndb, trans,
executionOp.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback, @@ -332,7 +332,7 @@ tradeOp.setInt(TRADE_QUANTITY, id);

if (!USE_SYNCHRONOUS) { - callback = new TradeCallback(id, ndb, executionOp.resultData()); + callback = new TradeCallback(id, ndb, trans, executionOp.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback, @@ -356,7 +356,7 @@ settlementOp.setInt(SETTLEMENT_VALUE, id);

if (!USE_SYNCHRONOUS) { - callback = new SettlementCallback(id, ndb, executionOp.resultData()); + callback = new SettlementCallback(id, ndb, trans,
executionOp.resultData());

trans.executeAsynchPrepare(ExecType.Commit, callback, @@ -417,7 +417,8 @@ Ndb myNdb; NdbResultSet myResults;

- public CountingCallback(int theCallbackNum, Ndb theNdb, NdbResultSet
theResults) { + public CountingCallback(int theCallbackNum, Ndb theNdb, NdbTransaction
theTrans, NdbResultSet theResults) { + super(theTrans); myTransactionCount++; myTotalTransactionCount++;

@@ -454,32 +455,32 @@

class OrderCallback extends CountingCallback {

- public OrderCallback(int theCallbackNum, Ndb theNdb, NdbResultSet theResults)
{ - super(theCallbackNum, theNdb, theResults); + public OrderCallback(int theCallbackNum, Ndb theNdb, NdbTransaction theTrans,
NdbResultSet theResults) { + super(theCallbackNum, theNdb, theTrans, theResults); }

}

class ExecutionCallback extends CountingCallback {

- public ExecutionCallback(int theCallbackNum, Ndb theNdb, NdbResultSet
theResults) { - super(theCallbackNum, theNdb, theResults); + public ExecutionCallback(int theCallbackNum, Ndb theNdb, NdbTransaction
theTrans, NdbResultSet theResults) { + super(theCallbackNum, theNdb, theTrans, theResults); }

}

class TradeCallback extends CountingCallback {

- public TradeCallback(int theCallbackNum, Ndb theNdb, NdbResultSet theResults)
{ - super(theCallbackNum, theNdb, theResults); + public TradeCallback(int theCallbackNum, Ndb theNdb, NdbTransaction theTrans,
NdbResultSet theResults) { + super(theCallbackNum, theNdb, theTrans, theResults); }

}

class SettlementCallback extends CountingCallback {

- public SettlementCallback(int theCallbackNum, Ndb theNdb, NdbResultSet
theResults) { - super(theCallbackNum, theNdb, theResults); + public SettlementCallback(int theCallbackNum, Ndb theNdb, NdbTransaction
theTrans, NdbResultSet theResults) { + super(theCallbackNum, theNdb, theTrans, theResults); }

}