summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorunknown <joreland@mysql.com>2005-06-07 10:50:27 +0200
committerunknown <joreland@mysql.com>2005-06-07 10:50:27 +0200
commite37db41fed13f044917b1f262e5533e5d62bb9c0 (patch)
treea4d3f67f8605866eb8c07f60229a4785be7f445c /ndb
parent7a6c62a107b961d2713cbd3ec56e11652920f45b (diff)
parenta59dee6c91628e14524837e2d2b53eac5bb7d54d (diff)
downloadmariadb-git-e37db41fed13f044917b1f262e5533e5d62bb9c0.tar.gz
Merge joreland@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/jonas/src/mysql-5.0 configure.in: Auto merged libmysqld/Makefile.am: Auto merged strings/ctype-big5.c: Auto merged strings/ctype-ucs2.c: Auto merged
Diffstat (limited to 'ndb')
-rw-r--r--ndb/include/transporter/TransporterRegistry.hpp7
-rw-r--r--ndb/src/common/transporter/SCI_Transporter.cpp9
-rw-r--r--ndb/src/common/transporter/SCI_Transporter.hpp3
-rw-r--r--ndb/src/common/transporter/SHM_Buffer.hpp17
-rw-r--r--ndb/src/common/transporter/SHM_Transporter.cpp6
-rw-r--r--ndb/src/common/transporter/SHM_Transporter.hpp2
-rw-r--r--ndb/src/common/transporter/SendBuffer.cpp2
-rw-r--r--ndb/src/common/transporter/SendBuffer.hpp2
-rw-r--r--ndb/src/common/transporter/TCP_Transporter.cpp5
-rw-r--r--ndb/src/common/transporter/TCP_Transporter.hpp1
-rw-r--r--ndb/src/common/transporter/Transporter.hpp2
-rw-r--r--ndb/src/common/transporter/TransporterRegistry.cpp12
-rw-r--r--ndb/src/kernel/blocks/dbdih/DbdihMain.cpp1
-rw-r--r--ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp3
-rw-r--r--ndb/src/mgmsrv/ConfigInfo.cpp4
-rw-r--r--ndb/src/ndbapi/NdbDictionaryImpl.cpp8
-rw-r--r--ndb/src/ndbapi/NdbOperationExec.cpp16
-rw-r--r--ndb/test/ndbapi/testNdbApi.cpp112
-rw-r--r--ndb/test/run-test/daily-basic-tests.txt4
-rwxr-xr-xndb/test/run-test/ndb-autotest.sh257
-rw-r--r--ndb/test/tools/hugoLoad.cpp6
-rw-r--r--ndb/test/tools/hugoPkUpdate.cpp7
-rw-r--r--ndb/test/tools/hugoScanRead.cpp7
-rw-r--r--ndb/test/tools/hugoScanUpdate.cpp8
-rw-r--r--ndb/tools/Makefile.am3
-rw-r--r--ndb/tools/restore/Restore.cpp13
26 files changed, 424 insertions, 93 deletions
diff --git a/ndb/include/transporter/TransporterRegistry.hpp b/ndb/include/transporter/TransporterRegistry.hpp
index 363cdabe10a..1ae8a4068c4 100644
--- a/ndb/include/transporter/TransporterRegistry.hpp
+++ b/ndb/include/transporter/TransporterRegistry.hpp
@@ -203,6 +203,13 @@ public:
bool createSCITransporter(struct TransporterConfiguration * config);
bool createSHMTransporter(struct TransporterConfiguration * config);
bool createOSETransporter(struct TransporterConfiguration * config);
+
+ /**
+ * Get free buffer space
+ *
+ * Get #free bytes in send buffer for <em>node</node>
+ */
+ Uint32 get_free_buffer(Uint32 node) const ;
/**
* prepareSend
diff --git a/ndb/src/common/transporter/SCI_Transporter.cpp b/ndb/src/common/transporter/SCI_Transporter.cpp
index 506140a887f..c96f84a4f4f 100644
--- a/ndb/src/common/transporter/SCI_Transporter.cpp
+++ b/ndb/src/common/transporter/SCI_Transporter.cpp
@@ -1025,7 +1025,8 @@ SCI_Transporter::initSCI() {
DBUG_RETURN(true);
}
-
-
-
-
+Uint32
+SCI_Transporter::get_free_buffer() const
+{
+ return (m_TargetSegm[m_ActiveAdapterId].writer)->get_free_buffer();
+}
diff --git a/ndb/src/common/transporter/SCI_Transporter.hpp b/ndb/src/common/transporter/SCI_Transporter.hpp
index 8d263f32a57..cb42e437118 100644
--- a/ndb/src/common/transporter/SCI_Transporter.hpp
+++ b/ndb/src/common/transporter/SCI_Transporter.hpp
@@ -133,7 +133,8 @@ public:
* remote segment is mapped. Otherwize false.
*/
bool getConnectionStatus();
-
+
+ virtual Uint32 get_free_buffer() const;
private:
SCI_Transporter(TransporterRegistry &t_reg,
const char *local_host,
diff --git a/ndb/src/common/transporter/SHM_Buffer.hpp b/ndb/src/common/transporter/SHM_Buffer.hpp
index f49b4fe73cb..27321a3191f 100644
--- a/ndb/src/common/transporter/SHM_Buffer.hpp
+++ b/ndb/src/common/transporter/SHM_Buffer.hpp
@@ -157,6 +157,7 @@ public:
inline Uint32 getWriteIndex() const { return m_writeIndex;}
inline Uint32 getBufferSize() const { return m_bufferSize;}
+ inline Uint32 get_free_buffer() const;
inline void copyIndexes(SHM_Writer * standbyWriter);
@@ -212,5 +213,21 @@ SHM_Writer::updateWritePtr(Uint32 sz){
m_writeIndex = tWriteIndex;
* m_sharedWriteIndex = tWriteIndex;
}
+
+inline
+Uint32
+SHM_Writer::get_free_buffer() const
+{
+ Uint32 tReadIndex = * m_sharedReadIndex;
+ Uint32 tWriteIndex = m_writeIndex;
+
+ Uint32 free;
+ if(tReadIndex <= tWriteIndex){
+ free = m_bufferSize + tReadIndex - tWriteIndex;
+ } else {
+ free = tReadIndex - tWriteIndex;
+ }
+ return free;
+}
#endif
diff --git a/ndb/src/common/transporter/SHM_Transporter.cpp b/ndb/src/common/transporter/SHM_Transporter.cpp
index e2d23cf94e2..a225988d37f 100644
--- a/ndb/src/common/transporter/SHM_Transporter.cpp
+++ b/ndb/src/common/transporter/SHM_Transporter.cpp
@@ -365,3 +365,9 @@ SHM_Transporter::doSend()
kill(m_remote_pid, g_ndb_shm_signum);
}
}
+
+Uint32
+SHM_Transporter::get_free_buffer() const
+{
+ return writer->get_free_buffer();
+}
diff --git a/ndb/src/common/transporter/SHM_Transporter.hpp b/ndb/src/common/transporter/SHM_Transporter.hpp
index 677bd6efc37..e7a76225471 100644
--- a/ndb/src/common/transporter/SHM_Transporter.hpp
+++ b/ndb/src/common/transporter/SHM_Transporter.hpp
@@ -139,6 +139,8 @@ protected:
int m_remote_pid;
Uint32 m_last_signal;
Uint32 m_signal_threshold;
+
+ virtual Uint32 get_free_buffer() const;
private:
bool _shmSegCreated;
diff --git a/ndb/src/common/transporter/SendBuffer.cpp b/ndb/src/common/transporter/SendBuffer.cpp
index 58cad96931f..8f69eb4bd40 100644
--- a/ndb/src/common/transporter/SendBuffer.cpp
+++ b/ndb/src/common/transporter/SendBuffer.cpp
@@ -60,7 +60,7 @@ SendBuffer::bufferSize() {
}
Uint32
-SendBuffer::bufferSizeRemaining() {
+SendBuffer::bufferSizeRemaining() const {
return (sizeOfBuffer - dataSize);
}
diff --git a/ndb/src/common/transporter/SendBuffer.hpp b/ndb/src/common/transporter/SendBuffer.hpp
index 63a01f3de24..7ebeb6d890e 100644
--- a/ndb/src/common/transporter/SendBuffer.hpp
+++ b/ndb/src/common/transporter/SendBuffer.hpp
@@ -51,7 +51,7 @@ public:
bool initBuffer(Uint32 aRemoteNodeId);
// Number of bytes remaining in the buffer
- Uint32 bufferSizeRemaining();
+ Uint32 bufferSizeRemaining() const;
// Number of bytes of data in the buffer
int bufferSize();
diff --git a/ndb/src/common/transporter/TCP_Transporter.cpp b/ndb/src/common/transporter/TCP_Transporter.cpp
index fd71cf71cd9..5db12d3985c 100644
--- a/ndb/src/common/transporter/TCP_Transporter.cpp
+++ b/ndb/src/common/transporter/TCP_Transporter.cpp
@@ -253,6 +253,11 @@ TCP_Transporter::sendIsPossible(struct timeval * timeout) {
#endif
}
+Uint32
+TCP_Transporter::get_free_buffer() const
+{
+ return m_sendBuffer.bufferSizeRemaining();
+}
Uint32 *
TCP_Transporter::getWritePtr(Uint32 lenBytes, Uint32 prio){
diff --git a/ndb/src/common/transporter/TCP_Transporter.hpp b/ndb/src/common/transporter/TCP_Transporter.hpp
index 9cd174150c1..df4149531b4 100644
--- a/ndb/src/common/transporter/TCP_Transporter.hpp
+++ b/ndb/src/common/transporter/TCP_Transporter.hpp
@@ -101,6 +101,7 @@ private:
*/
virtual void updateReceiveDataPtr(Uint32 bytesRead);
+ virtual Uint32 get_free_buffer() const;
protected:
/**
* Setup client/server and perform connect/accept
diff --git a/ndb/src/common/transporter/Transporter.hpp b/ndb/src/common/transporter/Transporter.hpp
index 53414f1179d..8c5e96226a3 100644
--- a/ndb/src/common/transporter/Transporter.hpp
+++ b/ndb/src/common/transporter/Transporter.hpp
@@ -86,6 +86,8 @@ public:
m_socket_client->set_port(port);
};
+ virtual Uint32 get_free_buffer() const = 0;
+
protected:
Transporter(TransporterRegistry &,
TransporterType,
diff --git a/ndb/src/common/transporter/TransporterRegistry.cpp b/ndb/src/common/transporter/TransporterRegistry.cpp
index f331b1660c1..5ffd3ac334e 100644
--- a/ndb/src/common/transporter/TransporterRegistry.cpp
+++ b/ndb/src/common/transporter/TransporterRegistry.cpp
@@ -558,6 +558,18 @@ TransporterRegistry::removeTransporter(NodeId nodeId) {
theTransporters[nodeId] = NULL;
}
+Uint32
+TransporterRegistry::get_free_buffer(Uint32 node) const
+{
+ Transporter *t;
+ if(likely((t = theTransporters[node]) != 0))
+ {
+ return t->get_free_buffer();
+ }
+ return 0;
+}
+
+
SendStatus
TransporterRegistry::prepareSend(const SignalHeader * const signalHeader,
Uint8 prio,
diff --git a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
index b2ed7acd347..03309f3ac67 100644
--- a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
+++ b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
@@ -5072,6 +5072,7 @@ Dbdih::invalidateNodeLCP(Signal* signal, Uint32 nodeId, TabRecordPtr tabPtr)
* And reset nextLcp
*/
replicaPtr.p->nextLcp = 0;
+ replicaPtr.p->noCrashedReplicas = 0;
}//if
}//for
}//for
diff --git a/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp b/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
index 6527864135b..6a478bea917 100644
--- a/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
+++ b/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp
@@ -133,6 +133,9 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 ToutBufIndex,
const Operationrec * const regOperPtr)
{
+ if(ToutBufIndex == 0)
+ return;
+
const BlockReference recBlockref = regOperPtr->recBlockref;
const Uint32 sig0 = regOperPtr->tcOperationPtr;
const Uint32 sig1 = regOperPtr->transid1;
diff --git a/ndb/src/mgmsrv/ConfigInfo.cpp b/ndb/src/mgmsrv/ConfigInfo.cpp
index 67bf09fab10..b1fe0735612 100644
--- a/ndb/src/mgmsrv/ConfigInfo.cpp
+++ b/ndb/src/mgmsrv/ConfigInfo.cpp
@@ -1668,7 +1668,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
false,
ConfigInfo::CI_INT,
"256K",
- "16K",
+ "64K",
STR_VALUE(MAX_INT_RNIL) },
{
@@ -1856,7 +1856,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
false,
ConfigInfo::CI_INT,
"1M",
- "4K",
+ "64K",
STR_VALUE(MAX_INT_RNIL) },
{
diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
index baf5c7e5c83..28e585b65b8 100644
--- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp
+++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
@@ -1649,7 +1649,11 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb,
abort();
}
- int distKeys= impl.m_noOfDistributionKeys;
+ int distKeys= impl.m_noOfDistributionKeys &&
+ impl.m_noOfDistributionKeys < impl.m_noOfKeys;
+
+ assert(distKeys == 0 || distKeys == 1);
+
for(i = 0; i<sz; i++){
const NdbColumnImpl * col = impl.m_columns[i];
if(col == 0)
@@ -1661,7 +1665,7 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb,
tmpAttr.AttributeId = i;
tmpAttr.AttributeKeyFlag = col->m_pk;
tmpAttr.AttributeNullableFlag = col->m_nullable;
- tmpAttr.AttributeDKey = col->m_distributionKey;
+ tmpAttr.AttributeDKey = distKeys * col->m_distributionKey;
tmpAttr.AttributeExtType = (Uint32)col->m_type;
tmpAttr.AttributeExtPrecision = ((unsigned)col->m_precision & 0xFFFF);
diff --git a/ndb/src/ndbapi/NdbOperationExec.cpp b/ndb/src/ndbapi/NdbOperationExec.cpp
index 4200300615d..58a816e3c1a 100644
--- a/ndb/src/ndbapi/NdbOperationExec.cpp
+++ b/ndb/src/ndbapi/NdbOperationExec.cpp
@@ -104,8 +104,9 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
{
Uint32 tTransId1, tTransId2;
Uint32 tReqInfo;
- Uint32 tInterpretInd = theInterpretIndicator;
-
+ Uint8 tInterpretInd = theInterpretIndicator;
+ Uint8 tDirtyIndicator = theDirtyIndicator;
+ Uint32 tTotalCurrAI_Len = theTotalCurrAI_Len;
theErrorLine = 0;
if (tInterpretInd != 1) {
@@ -123,7 +124,13 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
if (tStatus != GetValue) {
setErrorCodeAbort(4116);
return -1;
- }//if
+ }
+ else if(unlikely(tDirtyIndicator && tTotalCurrAI_Len == 0))
+ {
+ getValue(NdbDictionary::Column::FRAGMENT);
+ tTotalCurrAI_Len = theTotalCurrAI_Len;
+ assert(theTotalCurrAI_Len);
+ }
} else {
setErrorCodeAbort(4005);
return -1;
@@ -132,6 +139,7 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
if (prepareSendInterpreted() == -1) {
return -1;
}//if
+ tTotalCurrAI_Len = theTotalCurrAI_Len;
}//if
//-------------------------------------------------------------
@@ -140,7 +148,6 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
//-------------------------------------------------------------
TcKeyReq * const tcKeyReq = CAST_PTR(TcKeyReq, theTCREQ->getDataPtrSend());
- Uint32 tTotalCurrAI_Len = theTotalCurrAI_Len;
Uint32 tTableId = m_currentTable->m_tableId;
Uint32 tSchemaVersion = m_currentTable->m_version;
@@ -188,7 +195,6 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
tcKeyReq->setStartFlag(tReqInfo, tStartIndicator);
tcKeyReq->setInterpretedFlag(tReqInfo, tInterpretIndicator);
- Uint8 tDirtyIndicator = theDirtyIndicator;
OperationType tOperationType = theOperationType;
Uint32 tTupKeyLen = theTupKeyLen;
Uint8 abortOption =
diff --git a/ndb/test/ndbapi/testNdbApi.cpp b/ndb/test/ndbapi/testNdbApi.cpp
index 4867ea11a9a..ad1b1462ae7 100644
--- a/ndb/test/ndbapi/testNdbApi.cpp
+++ b/ndb/test/ndbapi/testNdbApi.cpp
@@ -866,6 +866,112 @@ int runUpdateWithoutKeys(NDBT_Context* ctx, NDBT_Step* step){
return result;
}
+
+int runReadWithoutGetValue(NDBT_Context* ctx, NDBT_Step* step){
+ int result = NDBT_OK;
+ const NdbDictionary::Table* pTab = ctx->getTab();
+
+ HugoOperations hugoOps(*pTab);
+
+ Ndb* pNdb = GETNDB(step);
+ Uint32 lm;
+
+ for(Uint32 cm= 0; cm < 2; cm++)
+ {
+ for(lm= 0; lm <= NdbOperation::LM_CommittedRead; lm++)
+ {
+ NdbConnection* pCon = pNdb->startTransaction();
+ if (pCon == NULL){
+ pNdb->closeTransaction(pCon);
+ return NDBT_FAILED;
+ }
+
+ NdbOperation* pOp = pCon->getNdbOperation(pTab->getName());
+ if (pOp == NULL){
+ ERR(pCon->getNdbError());
+ pNdb->closeTransaction(pCon);
+ return NDBT_FAILED;
+ }
+
+ if (pOp->readTuple((NdbOperation::LockMode)lm) != 0){
+ pNdb->closeTransaction(pCon);
+ ERR(pOp->getNdbError());
+ return NDBT_FAILED;
+ }
+
+ for(int a = 0; a<pTab->getNoOfColumns(); a++){
+ if (pTab->getColumn(a)->getPrimaryKey() == true){
+ if(hugoOps.equalForAttr(pOp, a, 1) != 0){
+ ERR(pCon->getNdbError());
+ pNdb->closeTransaction(pCon);
+ return NDBT_FAILED;
+ }
+ }
+ }
+
+ // Dont' call any getValues
+
+ // Execute should work
+ int check = pCon->execute(cm == 0 ? NoCommit : Commit);
+ if (check == 0){
+ ndbout << "execute worked" << endl;
+ } else {
+ ERR(pCon->getNdbError());
+ result = NDBT_FAILED;
+ }
+
+ pNdb->closeTransaction(pCon);
+ }
+ }
+
+ /**
+ * Now test scans
+ */
+ for(lm= 0; lm <= NdbOperation::LM_CommittedRead; lm++)
+ {
+ NdbConnection* pCon = pNdb->startTransaction();
+ if (pCon == NULL){
+ pNdb->closeTransaction(pCon);
+ return NDBT_FAILED;
+ }
+
+ NdbScanOperation* pOp = pCon->getNdbScanOperation(pTab->getName());
+ if (pOp == NULL){
+ ERR(pCon->getNdbError());
+ pNdb->closeTransaction(pCon);
+ return NDBT_FAILED;
+ }
+
+ if ((pOp->readTuples((NdbOperation::LockMode)lm)) != 0){
+ pNdb->closeTransaction(pCon);
+ ERR(pOp->getNdbError());
+ return NDBT_FAILED;
+ }
+
+
+ // Dont' call any getValues
+
+ // Execute should work
+ int check = pCon->execute(NoCommit);
+ if (check == 0){
+ ndbout << "execute worked" << endl;
+ } else {
+ ERR(pCon->getNdbError());
+ result = NDBT_FAILED;
+ }
+
+ int res;
+ while((res = pOp->nextResult()) == 0);
+ pNdb->closeTransaction(pCon);
+
+ if(res != 1)
+ result = NDBT_FAILED;
+ }
+
+ return result;
+}
+
+
int runCheckGetNdbErrorOperation(NDBT_Context* ctx, NDBT_Step* step){
int result = NDBT_OK;
const NdbDictionary::Table* pTab = ctx->getTab();
@@ -1000,6 +1106,12 @@ TESTCASE("NdbErrorOperation",
"Test that NdbErrorOperation is properly set"){
INITIALIZER(runCheckGetNdbErrorOperation);
}
+TESTCASE("ReadWithoutGetValue",
+ "Test that it's possible to perform read wo/ getvalue's\n"){
+ INITIALIZER(runLoadTable);
+ INITIALIZER(runReadWithoutGetValue);
+ FINALIZER(runClearTable);
+}
NDBT_TESTSUITE_END(testNdbApi);
int main(int argc, const char** argv){
diff --git a/ndb/test/run-test/daily-basic-tests.txt b/ndb/test/run-test/daily-basic-tests.txt
index b2d809ef6be..e3d7501e6f7 100644
--- a/ndb/test/run-test/daily-basic-tests.txt
+++ b/ndb/test/run-test/daily-basic-tests.txt
@@ -512,6 +512,10 @@ max-time: 500
cmd: testNdbApi
args: -n UpdateWithoutValues T6
+max-time: 500
+cmd: testNdbApi
+args: -n ReadWithoutGetValue
+
#max-time: 500
#cmd: testInterpreter
#args: T1
diff --git a/ndb/test/run-test/ndb-autotest.sh b/ndb/test/run-test/ndb-autotest.sh
index f1c83f079cd..3ba4d1928d5 100755
--- a/ndb/test/run-test/ndb-autotest.sh
+++ b/ndb/test/run-test/ndb-autotest.sh
@@ -1,10 +1,20 @@
#!/bin/sh
+#############################################################
+# This script created by Jonas does the following #
+# Cleans up clones and pevious builds, pulls new clones, #
+# builds, deploys, configures the tests and launches ATRT #
+#############################################################
+
+###############
+#Script setup #
+##############
save_args=$*
VERSION="ndb-autotest.sh version 1.04"
DATE=`date '+%Y-%m-%d'`
-export DATE
+HOST=`hostname -s`
+export DATE HOST
set -e
ulimit -Sc unlimited
@@ -14,21 +24,33 @@ echo "`date` starting: $*"
RSYNC_RSH=ssh
export RSYNC_RSH
+verbose=0
do_clone=yes
build=yes
deploy=yes
+run_test=yes
+config=yes
+report=yes
clone=5.0-ndb
RUN="daily-basic daily-devel"
conf=autotest.conf
+############################
+# Read command line entries#
+############################
+
while [ "$1" ]
do
case "$1" in
--no-clone) do_clone="";;
--no-build) build="";;
--no-deploy) deploy="";;
- --clone=*) clone=`echo $1 | sed s/--clone=//`;;
+ --no-test) run_test="";;
+ --no-config) config="";;
+ --no-report) report="";;
+ --verbose) verbose=`expr $verbose + 1`;;
+ --clone=*) clone=`echo $1 | sed s/--clone=//`;;
--conf=*) conf=`echo $1 | sed s/--conf=//`;;
--version) echo $VERSION; exit;;
*) RUN=$*;;
@@ -36,6 +58,12 @@ do
shift
done
+#################################
+#Make sure the configfile exists#
+#if it does not exit. if it does#
+# (.) load it #
+#################################
+
if [ -f $conf ]
then
. $conf
@@ -44,51 +72,119 @@ else
exit
fi
-env
+###############################
+# Validate that all interesting
+# variables where set in conf
+###############################
+vars="target base_dir src_clone_base install_dir build_dir hosts configure"
+if [ "$report" ]
+then
+ vars="$vars result_host result_path"
+fi
+for i in $vars
+do
+ t=`echo echo \\$$i`
+ if [ -z `eval $t` ]
+ then
+ echo "Invalid config: $conf, variable $i is not set"
+ exit
+ fi
+done
+
+###############################
+#Print out the enviroment vars#
+###############################
+
+if [ $verbose -gt 0 ]
+then
+ env
+fi
+
+####################################
+# Setup the lock file name and path#
+# Setup the clone source location #
+####################################
LOCK=$HOME/.autotest-lock
src_clone=$src_clone_base-$clone
+#######################################
+# Check to see if the lock file exists#
+# If it does exit. #
+#######################################
+
if [ -f $LOCK ]
then
echo "Lock file exists: $LOCK"
exit 1
fi
+#######################################
+# If the lock file does not exist then#
+# create it with date and run info #
+#######################################
+
echo "$DATE $RUN" > $LOCK
+
+#############################
+#If any errors here down, we#
+# trap them, and remove the #
+# Lock file before exit #
+#############################
+
trap "rm -f $LOCK" ERR
+# You can add more to this path#
+################################
+
dst_place=${build_dir}/clone-mysql-$clone-$DATE
+#########################################
+# Delete source and pull down the latest#
+#########################################
+
if [ "$do_clone" ]
then
rm -rf $dst_place
bk clone $src_clone $dst_place
fi
+##########################################
+# Build the source, make installs, and #
+# create the database to be rsynced #
+##########################################
+
if [ "$build" ]
then
cd $dst_place
- rm -rf $run_dir/*
- aclocal; autoheader; autoconf; automake
- if [ -d storage ]
+ rm -rf $install_dir/*
+ if [ -x BUILD/autorun.sh ]
then
- (cd storage/innobase; aclocal; autoheader; autoconf; automake)
- (cd storage/bdb/dist; sh s_all)
+ ./BUILD/autorun.sh
else
- (cd innobase; aclocal; autoheader; autoconf; automake)
- (cd bdb/dist; sh s_all)
+ aclocal; autoheader; autoconf; automake
+ if [ -d storage ]
+ then
+ (cd storage/innobase; aclocal; autoheader; autoconf; automake)
+ (cd storage/bdb/dist; sh s_all)
+ else
+ (cd innobase; aclocal; autoheader; autoconf; automake)
+ (cd bdb/dist; sh s_all)
+ fi
fi
- eval $configure --prefix=$run_dir
+ eval $configure --prefix=$install_dir
make
make install
- (cd $run_dir; ./bin/mysql_install_db)
+ (cd $install_dir; ./bin/mysql_install_db) # This will be rsynced to all
fi
-###
-# check script version
-#
-script=$run_dir/mysql-test/ndb/ndb-autotest.sh
+################################
+# check script version. If the #
+# version is old, replace it #
+# and restart #
+################################
+
+script=$install_dir/mysql-test/ndb/ndb-autotest.sh
if [ -x $script ]
then
$script --version > /tmp/version.$$
@@ -100,21 +196,34 @@ rm -f /tmp/version.$$
if [ $match -eq 0 ]
then
echo "Incorrect script version...restarting"
- cp $run_dir/mysql-test/ndb/ndb-autotest.sh /tmp/at.$$.sh
- rm -rf $run_dir $dst_place
+ cp $install_dir/mysql-test/ndb/ndb-autotest.sh /tmp/at.$$.sh
+ rm -rf $install_dir $dst_place
sh /tmp/at.$$.sh $save_args
exit
fi
-# Check that all interesting files are present
-test_dir=$run_dir/mysql-test/ndb
+###############################################
+# Check that all interesting files are present#
+###############################################
+
+test_dir=$install_dir/mysql-test/ndb
atrt=$test_dir/atrt
html=$test_dir/make-html-reports.sh
-mkconfig=$run_dir/mysql-test/ndb/make-config.sh
+mkconfig=$install_dir/mysql-test/ndb/make-config.sh
-PATH=$run_dir/bin:$test_dir:$PATH
+##########################
+#Setup bin and test paths#
+##########################
+
+PATH=$install_dir/bin:$test_dir:$PATH
export PATH
+###########################
+# This will filter out all#
+# the host that did not #
+# respond. Called below #
+###########################
+
filter(){
neg=$1
shift
@@ -125,18 +234,22 @@ filter(){
done
}
-###
-# check ndb_cpcc fail hosts
-#
+############################
+# check ndb_cpcc fail hosts#
+############################
ndb_cpcc $hosts | awk '{ if($1=="Failed"){ print;}}' > /tmp/failed.$DATE
filter /tmp/failed.$DATE $hosts > /tmp/hosts.$DATE
hosts=`cat /tmp/hosts.$DATE`
+#############################
+# Push bin and test to hosts#
+#############################
+
if [ "$deploy" ]
then
for i in $hosts
- do
- rsync -a --delete --force --ignore-errors $run_dir/ $i:$run_dir
+ do
+ rsync -a --delete --force --ignore-errors $install_dir/ $i:$install_dir
ok=$?
if [ $ok -ne 0 ]
then
@@ -145,7 +258,6 @@ then
fi
done
fi
-rm -f /tmp/build.$DATE.tgz
###
# handle scp failed hosts
@@ -154,9 +266,11 @@ filter /tmp/failed.$DATE $hosts > /tmp/hosts.$DATE
hosts=`cat /tmp/hosts.$DATE`
cat /tmp/failed.$DATE > /tmp/filter_hosts.$$
-###
-# functions for running atrt
-#
+#############################
+# Function for replacing the#
+# choose host with real host#
+# names. Note $$ = PID #
+#############################
choose(){
SRC=$1
TMP1=/tmp/choose.$$
@@ -177,16 +291,25 @@ choose(){
}
choose_conf(){
- host=`hostname -s`
- if [ -f $test_dir/conf-$1-$host.txt ]
- then
+ if [ -f $test_dir/conf-$1-$HOST.txt ]
+ then
+ echo "$test_dir/conf-$1-$HOST.txt"
echo "$test_dir/conf-$1-$host.txt"
elif [ -f $test_dir/conf-$1.txt ]
then
echo "$test_dir/conf-$1.txt"
+ else
+ echo "Unable to find conf file looked for" 1>&2
+ echo "$testdir/conf-$1-host.txt and" 1>&2
+ echo "$testdir/conf-$1.txt" 1>&2
+ exit
fi
}
-
+######################################
+# Starts ATRT and gives it the right #
+# command line options. after it #
+# Gathers results and moves them #
+######################################
start(){
rm -rf report.txt result* log.txt
$atrt -v -v -r -R --log-file=log.txt --testcase-file=$test_dir/$2-tests.txt &
@@ -202,17 +325,31 @@ start(){
cd ..
p2=`pwd`
cd ..
- tar cfz /tmp/res.$$.tgz `basename $p2`/$DATE
- scp /tmp/res.$$.tgz $result_host:$result_path/res.$DATE.`hostname -s`.$2.$$.tgz
- rm -f /tmp/res.$$.tgz
+ if [ "$report" ]
+ then
+ tar cfz /tmp/res.$2.$$.tgz `basename $p2`/$DATE
+ scp /tmp/res.$2.$$.tgz \
+ $result_host:$result_path/res.$DATE.$HOST.$2.$$.tgz
+ rm -f /tmp/res.$2.$$.tgz
+ fi
}
+#########################################
+# Count how many computers we have ready#
+#########################################
+
count_hosts(){
- cnt=`grep "CHOOSE_host" $1 |
- awk '{for(i=1; i<=NF;i++) if(match($i, "CHOOSE_host") > 0) print $i;}' |
- sort | uniq | wc -l`
+ cnt=`grep "CHOOSE_host" $1 | awk '{for(i=1; i<=NF;i++) \
+ if(match($i, "CHOOSE_host") > 0) print $i;}' | sort | uniq | wc -l`
echo $cnt
}
+#######################################################
+# Calls: Choose #
+# Choose_host #
+# Count_host #
+# start #
+# for each directory in the $RUN variable #
+#######################################################
p=`pwd`
for dir in $RUN
@@ -223,26 +360,36 @@ do
res_dir=$base_dir/result-$dir-mysql-$clone-$target/$DATE
mkdir -p $run_dir $res_dir
- rm -rf $res_dir/* $run_dir/*
-
- conf=`choose_conf $dir`
- count=`count_hosts $conf`
- avail_hosts=`filter /tmp/filter_hosts.$$ $hosts`
- avail=`echo $avail_hosts | wc -w`
- if [ $count -gt $avail ]
+ rm -rf $res_dir/*
+ cd $run_dir
+
+ if [ "$config" ]
then
+ rm -rf $run_dir/*
+
+ conf=`choose_conf $dir`
+ count=`count_hosts $conf`
+ avail_hosts=`filter /tmp/filter_hosts.$$ $hosts`
+ avail=`echo $avail_hosts | wc -w`
+ if [ $count -gt $avail ]
+ then
echo "Not enough hosts"
echo "Needs: $count available: $avail ($avail_hosts)"
break;
- fi
+ fi
- run_hosts=`echo $avail_hosts|awk '{for(i=1;i<='$count';i++)print $i;}'`
- echo $run_hosts >> /tmp/filter_hosts.$$
+ run_hosts=`echo $avail_hosts| \
+ awk '{for(i=1;i<='$count';i++)print $i;}'`
+ echo $run_hosts >> /tmp/filter_hosts.$$
- cd $run_dir
- choose $conf $run_hosts > d.tmp
- $mkconfig d.tmp
- start $dir-mysql-$clone-$target $dir $res_dir &
+ choose $conf $run_hosts > d.tmp
+ $mkconfig d.tmp
+ fi
+
+ if [ "$run_test" ]
+ then
+ start $dir-mysql-$clone-$target $dir $res_dir &
+ fi
done
cd $p
rm /tmp/filter_hosts.$$
diff --git a/ndb/test/tools/hugoLoad.cpp b/ndb/test/tools/hugoLoad.cpp
index 7d9d0dafaff..1a229169650 100644
--- a/ndb/test/tools/hugoLoad.cpp
+++ b/ndb/test/tools/hugoLoad.cpp
@@ -30,10 +30,12 @@ int main(int argc, const char** argv){
const char* _tabname = NULL;
int _help = 0;
int _batch = 512;
-
+ const char* db = 0;
+
struct getargs args[] = {
{ "records", 'r', arg_integer, &_records, "Number of records", "recs" },
{ "batch", 'b', arg_integer, &_batch, "Number of operations in each transaction", "batch" },
+ { "database", 'd', arg_string, &db, "Database", "" },
{ "usage", '?', arg_flag, &_help, "Print help", "" }
};
int num_args = sizeof(args) / sizeof(args[0]);
@@ -59,7 +61,7 @@ int main(int argc, const char** argv){
{
return NDBT_ProgramExit(NDBT_FAILED);
}
- Ndb MyNdb(&con, "TEST_DB" );
+ Ndb MyNdb( &con, db ? db : "TEST_DB" );
if(MyNdb.init() != 0){
ERR(MyNdb.getNdbError());
diff --git a/ndb/test/tools/hugoPkUpdate.cpp b/ndb/test/tools/hugoPkUpdate.cpp
index 6e7ff39f903..7d46ae95c29 100644
--- a/ndb/test/tools/hugoPkUpdate.cpp
+++ b/ndb/test/tools/hugoPkUpdate.cpp
@@ -33,7 +33,7 @@ int main(int argc, const char** argv){
int _loops = 1;
int _abort = 0;
int _batch = 0;
- const char* _tabname = NULL;
+ const char* _tabname = NULL, *db = 0;
int _help = 0;
struct getargs args[] = {
@@ -41,7 +41,8 @@ int main(int argc, const char** argv){
{ "loops", 'l', arg_integer, &_loops, "number of times to run this program(0=infinite loop)", "loops" },
// { "batch", 'b', arg_integer, &_batch, "batch value", "batch" },
{ "records", 'r', arg_integer, &_records, "Number of records", "records" },
- { "usage", '?', arg_flag, &_help, "Print help", "" }
+ { "usage", '?', arg_flag, &_help, "Print help", "" },
+ { "database", 'd', arg_string, &db, "Database", "" }
};
int num_args = sizeof(args) / sizeof(args[0]);
int optind = 0;
@@ -62,7 +63,7 @@ int main(int argc, const char** argv){
{
return NDBT_ProgramExit(NDBT_FAILED);
}
- Ndb MyNdb(&con, "TEST_DB" );
+ Ndb MyNdb( &con, db ? db : "TEST_DB" );
if(MyNdb.init() != 0){
ERR(MyNdb.getNdbError());
diff --git a/ndb/test/tools/hugoScanRead.cpp b/ndb/test/tools/hugoScanRead.cpp
index 4f76362ecab..a345bb88d0e 100644
--- a/ndb/test/tools/hugoScanRead.cpp
+++ b/ndb/test/tools/hugoScanRead.cpp
@@ -33,7 +33,7 @@ int main(int argc, const char** argv){
int _loops = 1;
int _abort = 0;
int _parallelism = 1;
- const char* _tabname = NULL;
+ const char* _tabname = NULL, *db = 0;
int _help = 0;
int lock = NdbOperation::LM_Read;
int sorted = 0;
@@ -45,7 +45,8 @@ int main(int argc, const char** argv){
{ "records", 'r', arg_integer, &_records, "Number of records", "recs" },
{ "usage", '?', arg_flag, &_help, "Print help", "" },
{ "lock", 'm', arg_integer, &lock, "lock mode", "" },
- { "sorted", 's', arg_flag, &sorted, "sorted", "" }
+ { "sorted", 's', arg_flag, &sorted, "sorted", "" },
+ { "database", 'd', arg_string, &db, "Database", "" }
};
int num_args = sizeof(args) / sizeof(args[0]);
int optind = 0;
@@ -66,7 +67,7 @@ int main(int argc, const char** argv){
{
return NDBT_ProgramExit(NDBT_FAILED);
}
- Ndb MyNdb(&con, "TEST_DB" );
+ Ndb MyNdb( &con, db ? db : "TEST_DB" );
if(MyNdb.init() != 0){
ERR(MyNdb.getNdbError());
diff --git a/ndb/test/tools/hugoScanUpdate.cpp b/ndb/test/tools/hugoScanUpdate.cpp
index 88c343f8fd3..6960fa44b96 100644
--- a/ndb/test/tools/hugoScanUpdate.cpp
+++ b/ndb/test/tools/hugoScanUpdate.cpp
@@ -33,7 +33,7 @@ int main(int argc, const char** argv){
int _loops = 1;
int _parallelism = 1;
int _ver2 = 0;
- const char* _tabname = NULL;
+ const char* _tabname = NULL, *db = 0;
int _help = 0;
struct getargs args[] = {
@@ -42,7 +42,8 @@ int main(int argc, const char** argv){
{ "records", 'r', arg_integer, &_records, "Number of records", "recs" },
{ "ver2", '2', arg_flag, &_ver2, "Use version 2 of scanUpdateRecords", "" },
{ "ver2", '1', arg_negative_flag, &_ver2, "Use version 1 of scanUpdateRecords (default)", "" },
- { "usage", '?', arg_flag, &_help, "Print help", "" }
+ { "usage", '?', arg_flag, &_help, "Print help", "" },
+ { "database", 'd', arg_string, &db, "Database", "" }
};
int num_args = sizeof(args) / sizeof(args[0]);
int optind = 0;
@@ -63,7 +64,7 @@ int main(int argc, const char** argv){
{
return NDBT_ProgramExit(NDBT_FAILED);
}
- Ndb MyNdb(&con, "TEST_DB" );
+ Ndb MyNdb( &con, db ? db : "TEST_DB" );
if(MyNdb.init() != 0){
ERR(MyNdb.getNdbError());
@@ -100,6 +101,7 @@ int main(int argc, const char** argv){
return NDBT_ProgramExit(NDBT_FAILED);
}
i++;
+ //NdbSleep_MilliSleep(300);
}
return NDBT_ProgramExit(NDBT_OK);
diff --git a/ndb/tools/Makefile.am b/ndb/tools/Makefile.am
index c350fb0a141..1008b166dfc 100644
--- a/ndb/tools/Makefile.am
+++ b/ndb/tools/Makefile.am
@@ -30,7 +30,8 @@ ndb_restore_SOURCES = restore/restore_main.cpp \
restore/consumer.cpp \
restore/consumer_restore.cpp \
restore/consumer_printer.cpp \
- restore/Restore.cpp
+ restore/Restore.cpp \
+ ../test/src/NDBT_ResultRow.cpp $(tools_common_sources)
include $(top_srcdir)/ndb/config/common.mk.am
include $(top_srcdir)/ndb/config/type_ndbapitools.mk.am
diff --git a/ndb/tools/restore/Restore.cpp b/ndb/tools/restore/Restore.cpp
index fa616ee8fee..81a8d4aba41 100644
--- a/ndb/tools/restore/Restore.cpp
+++ b/ndb/tools/restore/Restore.cpp
@@ -925,19 +925,12 @@ operator<<(NdbOut& ndbout, const LogEntry& logE)
return ndbout;
}
+#include <NDBT.hpp>
NdbOut &
operator<<(NdbOut& ndbout, const TableS & table){
- ndbout << endl << "Table: " << table.getTableName() << endl;
- for (int j = 0; j < table.getNoOfAttributes(); j++)
- {
- const AttributeDesc * desc = table[j];
- ndbout << desc->m_column->getName() << ": "
- << (Uint32) desc->m_column->getType();
- ndbout << " key: " << (Uint32) desc->m_column->getPrimaryKey();
- ndbout << " array: " << desc->arraySize;
- ndbout << " size: " << desc->size << endl;
- } // for
+
+ ndbout << (* (NDBT_Table*)table.m_dictTable) << endl;
return ndbout;
}