Commit f0fb0d17 authored by unknown's avatar unknown

Merge perch.ndb.mysql.com:/home/jonas/src/51-work

into  perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb


sql/ha_ndbcluster.cc:
  Auto merged
storage/ndb/src/ndbapi/NdbTransaction.cpp:
  Auto merged
parents bb06ec21 b8812c85
...@@ -1892,7 +1892,8 @@ int ha_ndbcluster::peek_indexed_rows(const byte *record) ...@@ -1892,7 +1892,8 @@ int ha_ndbcluster::peek_indexed_rows(const byte *record)
int res; int res;
DBUG_ENTER("peek_indexed_rows"); DBUG_ENTER("peek_indexed_rows");
NdbOperation::LockMode lm= NdbOperation::LM_Read; NdbOperation::LockMode lm=
(NdbOperation::LockMode)get_ndb_lock_type(m_lock.type);
first= NULL; first= NULL;
if (table->s->primary_key != MAX_KEY) if (table->s->primary_key != MAX_KEY)
{ {
......
...@@ -683,8 +683,8 @@ void getTextMemoryUsage(QQQQ) { ...@@ -683,8 +683,8 @@ void getTextMemoryUsage(QQQQ) {
const int used = theData[3]; const int used = theData[3];
const int total = theData[4]; const int total = theData[4];
const int block = theData[5]; const int block = theData[5];
const int percent = (used*100)/total; const int percent = total ? (used*100)/total : 0;
BaseString::snprintf(m_text, m_text_len, BaseString::snprintf(m_text, m_text_len,
"%s usage %s %d%s(%d %dK pages of total %d)", "%s usage %s %d%s(%d %dK pages of total %d)",
(block==DBACC ? "Index" : (block == DBTUP ?"Data":"<unknown>")), (block==DBACC ? "Index" : (block == DBTUP ?"Data":"<unknown>")),
......
...@@ -42,6 +42,7 @@ void Dbacc::initData() ...@@ -42,6 +42,7 @@ void Dbacc::initData()
scanRec = 0; scanRec = 0;
tabrec = 0; tabrec = 0;
cnoOfAllocatedPages = cpagesize = 0;
// Records with constant sizes // Records with constant sizes
}//Dbacc::initData() }//Dbacc::initData()
......
...@@ -113,7 +113,7 @@ void Dbacc::execCONTINUEB(Signal* signal) ...@@ -113,7 +113,7 @@ void Dbacc::execCONTINUEB(Signal* signal)
case ZREPORT_MEMORY_USAGE:{ case ZREPORT_MEMORY_USAGE:{
jam(); jam();
static int c_currentMemUsed = 0; static int c_currentMemUsed = 0;
int now = (cnoOfAllocatedPages * 100)/cpagesize; int now = cpagesize ? (cnoOfAllocatedPages * 100)/cpagesize : 0;
const int thresholds[] = { 99, 90, 80, 0}; const int thresholds[] = { 99, 90, 80, 0};
Uint32 i = 0; Uint32 i = 0;
......
...@@ -1295,6 +1295,7 @@ void Dbtc::execTCRELEASEREQ(Signal* signal) ...@@ -1295,6 +1295,7 @@ void Dbtc::execTCRELEASEREQ(Signal* signal)
apiConnectptr.p->firstTcConnect == RNIL)) apiConnectptr.p->firstTcConnect == RNIL))
{ {
jam(); /* JUST REPLY OK */ jam(); /* JUST REPLY OK */
apiConnectptr.p->m_transaction_nodes.clear();
releaseApiCon(signal, apiConnectptr.i); releaseApiCon(signal, apiConnectptr.i);
signal->theData[0] = tuserpointer; signal->theData[0] = tuserpointer;
sendSignal(tapiBlockref, sendSignal(tapiBlockref,
......
...@@ -352,7 +352,8 @@ void Dbtup::tupkeyErrorLab(Signal* signal) ...@@ -352,7 +352,8 @@ void Dbtup::tupkeyErrorLab(Signal* signal)
tabPtr.i= fragPtr.p->fragTableId; tabPtr.i= fragPtr.p->fragTableId;
ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec); ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
if (regOperPtr->m_undo_buffer_space) if (regOperPtr->m_undo_buffer_space &&
(regOperPtr->is_first_operation() && regOperPtr->is_last_operation()))
{ {
c_lgman->free_log_space(fragPtr.p->m_logfile_group_id, c_lgman->free_log_space(fragPtr.p->m_logfile_group_id,
regOperPtr->m_undo_buffer_space); regOperPtr->m_undo_buffer_space);
......
...@@ -169,7 +169,8 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -169,7 +169,8 @@ void Dbtup::execCONTINUEB(Signal* signal)
case ZREPORT_MEMORY_USAGE:{ case ZREPORT_MEMORY_USAGE:{
ljam(); ljam();
static int c_currentMemUsed = 0; static int c_currentMemUsed = 0;
int now = (cnoOfAllocatedPages * 100)/c_page_pool.getSize(); Uint32 tmp = c_page_pool.getSize();
int now = tmp ? (cnoOfAllocatedPages * 100)/tmp : 0;
const int thresholds[] = { 100, 90, 80, 0 }; const int thresholds[] = { 100, 90, 80, 0 };
Uint32 i = 0; Uint32 i = 0;
......
...@@ -360,8 +360,15 @@ NdbTransaction::execute(ExecType aTypeOfExec, ...@@ -360,8 +360,15 @@ NdbTransaction::execute(ExecType aTypeOfExec,
ret = -1; ret = -1;
if(savedError.code==0) if(savedError.code==0)
savedError= theError; savedError= theError;
/**
* If AO_IgnoreError, error codes arent always set on individual
* operations, making postExecute impossible
*/
if (abortOption == AO_IgnoreError)
DBUG_RETURN(-1);
} }
#ifdef ndb_api_crash_on_complex_blob_abort #ifdef ndb_api_crash_on_complex_blob_abort
assert(theFirstOpInList == NULL && theLastOpInList == NULL); assert(theFirstOpInList == NULL && theLastOpInList == NULL);
#else #else
...@@ -1761,8 +1768,10 @@ from other transactions. ...@@ -1761,8 +1768,10 @@ from other transactions.
if (tCommitFlag == 1) { if (tCommitFlag == 1) {
theCommitStatus = Committed; theCommitStatus = Committed;
theGlobalCheckpointId = tGCI; theGlobalCheckpointId = tGCI;
assert(tGCI); if (tGCI) // Read(dirty) only transaction doesnt get GCI
*p_latest_trans_gci = tGCI; {
*p_latest_trans_gci = tGCI;
}
} else if ((tNoComp >= tNoSent) && } else if ((tNoComp >= tNoSent) &&
(theLastExecOpInList->theCommitIndicator == 1)){ (theLastExecOpInList->theCommitIndicator == 1)){
......
...@@ -364,6 +364,9 @@ public: ...@@ -364,6 +364,9 @@ public:
// Table create tweaks // Table create tweaks
int createHook(Ndb*, NdbDictionary::Table&, int when); int createHook(Ndb*, NdbDictionary::Table&, int when);
Vector<BaseString> m_tables_in_test; Vector<BaseString> m_tables_in_test;
void setTemporaryTables(bool val);
bool getTemporaryTables() const;
private: private:
int executeOne(Ndb_cluster_connection&, int executeOne(Ndb_cluster_connection&,
const char* _tabname, const char* testname = NULL); const char* _tabname, const char* testname = NULL);
...@@ -390,6 +393,7 @@ private: ...@@ -390,6 +393,7 @@ private:
bool runonce; bool runonce;
const char* tsname; const char* tsname;
bool createAllTables; bool createAllTables;
bool temporaryTables;
}; };
......
...@@ -660,9 +660,11 @@ main(int argc, const char** argv){ ...@@ -660,9 +660,11 @@ main(int argc, const char** argv){
Vector<int> tmp; Vector<int> tmp;
generate(tmp, 5); generate(tmp, 5);
NDBT_TestSuite ts("testOperations"); NDBT_TestSuite ts("testOperations");
ts.setTemporaryTables(true);
for(Uint32 i = 0; i < 12; i++) for(Uint32 i = 0; i < 12; i++)
{ {
if(false && (i == 6 || i == 8 || i == 10)) if(false && (i == 6 || i == 8 || i == 10))
......
...@@ -372,6 +372,8 @@ main(int argc, const char** argv){ ...@@ -372,6 +372,8 @@ main(int argc, const char** argv){
ndb_init(); ndb_init();
NDBT_TestSuite ts("testOperations"); NDBT_TestSuite ts("testOperations");
ts.setTemporaryTables(true);
for(Uint32 i = 0; i<sizeof(matrix)/sizeof(matrix[0]); i++){ for(Uint32 i = 0; i<sizeof(matrix)/sizeof(matrix[0]); i++){
NDBT_TestCaseImpl1 *pt = new NDBT_TestCaseImpl1(&ts, matrix[i].name, ""); NDBT_TestCaseImpl1 *pt = new NDBT_TestCaseImpl1(&ts, matrix[i].name, "");
......
...@@ -1039,6 +1039,11 @@ NDBT_Tables::createTable(Ndb* pNdb, const char* _name, bool _temp, ...@@ -1039,6 +1039,11 @@ NDBT_Tables::createTable(Ndb* pNdb, const char* _name, bool _temp,
j++; j++;
} }
j++; j++;
if (tmpTab.getTemporary())
{
tmpIndx.setTemporary(true);
tmpIndx.setLogging(false);
}
if(pNdb->getDictionary()->createIndex(tmpIndx) != 0){ if(pNdb->getDictionary()->createIndex(tmpIndx) != 0){
ndbout << pNdb->getDictionary()->getNdbError() << endl; ndbout << pNdb->getDictionary()->getNdbError() << endl;
return NDBT_FAILED; return NDBT_FAILED;
......
...@@ -770,6 +770,7 @@ NDBT_TestSuite::NDBT_TestSuite(const char* pname):name(pname){ ...@@ -770,6 +770,7 @@ NDBT_TestSuite::NDBT_TestSuite(const char* pname):name(pname){
diskbased = false; diskbased = false;
tsname = NULL; tsname = NULL;
createAllTables = false; createAllTables = false;
temporaryTables = false;
} }
...@@ -791,6 +792,14 @@ void NDBT_TestSuite::setCreateAllTables(bool _flag){ ...@@ -791,6 +792,14 @@ void NDBT_TestSuite::setCreateAllTables(bool _flag){
createAllTables = _flag; createAllTables = _flag;
} }
void NDBT_TestSuite::setTemporaryTables(bool val){
temporaryTables = val;
}
bool NDBT_TestSuite::getTemporaryTables() const {
return temporaryTables;
}
bool NDBT_TestSuite::timerIsOn(){ bool NDBT_TestSuite::timerIsOn(){
return (timer != 0); return (timer != 0);
} }
...@@ -805,6 +814,7 @@ static int ...@@ -805,6 +814,7 @@ static int
g_create_hook(Ndb* ndb, NdbDictionary::Table& tab, int when, void* arg) g_create_hook(Ndb* ndb, NdbDictionary::Table& tab, int when, void* arg)
{ {
NDBT_TestSuite* ts = (NDBT_TestSuite*)arg; NDBT_TestSuite* ts = (NDBT_TestSuite*)arg;
return ts->createHook(ndb, tab, when); return ts->createHook(ndb, tab, when);
} }
...@@ -942,14 +952,23 @@ int ...@@ -942,14 +952,23 @@ int
NDBT_TestSuite::createHook(Ndb* ndb, NdbDictionary::Table& tab, int when) NDBT_TestSuite::createHook(Ndb* ndb, NdbDictionary::Table& tab, int when)
{ {
if (when == 0) { if (when == 0) {
if (diskbased) { if (diskbased)
for (int i = 0; i < tab.getNoOfColumns(); i++) { {
for (int i = 0; i < tab.getNoOfColumns(); i++)
{
NdbDictionary::Column* col = tab.getColumn(i); NdbDictionary::Column* col = tab.getColumn(i);
if (! col->getPrimaryKey()) { if (! col->getPrimaryKey())
{
col->setStorageType(NdbDictionary::Column::StorageTypeDisk); col->setStorageType(NdbDictionary::Column::StorageTypeDisk);
} }
} }
} }
else if (temporaryTables)
{
tab.setTemporary(true);
tab.setLogging(false);
}
if (tsname != NULL) { if (tsname != NULL) {
tab.setTablespace(tsname); tab.setTablespace(tsname);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment