diff options
author | unknown <tomas@poseidon.ndb.mysql.com> | 2006-06-30 00:02:17 +0200 |
---|---|---|
committer | unknown <tomas@poseidon.ndb.mysql.com> | 2006-06-30 00:02:17 +0200 |
commit | 7bc46be138e7c2c95341ceaefb7571c88d4fb414 (patch) | |
tree | 18de49d6205d2c3ece88714920d70b7698687fe8 /sql/ha_ndbcluster.cc | |
parent | 96a14ba258b0569843fc98d1aad170f99ce79cbb (diff) | |
parent | e6297be853f308be20bfe97d1853419855264baf (diff) | |
download | mariadb-git-7bc46be138e7c2c95341ceaefb7571c88d4fb414.tar.gz |
Merge poseidon.ndb.mysql.com:/home/tomas/mysql-5.0-main
into poseidon.ndb.mysql.com:/home/tomas/5.0-merge
sql/ha_ndbcluster.cc:
Auto merged
Diffstat (limited to 'sql/ha_ndbcluster.cc')
-rw-r--r-- | sql/ha_ndbcluster.cc | 100 |
1 files changed, 56 insertions, 44 deletions
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index a9c23485042..b36099cf25c 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -363,6 +363,7 @@ void ha_ndbcluster::records_update() { Ndb *ndb= get_ndb(); struct Ndb_statistics stat; + ndb->setDatabaseName(m_dbname); if (ndb_get_table_statistics(ndb, m_tabname, &stat) == 0){ mean_rec_length= stat.row_size; data_file_length= stat.fragment_memory; @@ -3081,6 +3082,7 @@ void ha_ndbcluster::info(uint flag) DBUG_VOID_RETURN; Ndb *ndb= get_ndb(); struct Ndb_statistics stat; + ndb->setDatabaseName(m_dbname); if (current_thd->variables.ndb_use_exact_count && ndb_get_table_statistics(ndb, m_tabname, &stat) == 0) { @@ -5842,62 +5844,60 @@ ndb_get_table_statistics(Ndb* ndb, const char * table, DBUG_ENTER("ndb_get_table_statistics"); DBUG_PRINT("enter", ("table: %s", table)); NdbTransaction* pTrans; + NdbError error; int retries= 10; int retry_sleep= 30 * 1000; /* 30 milliseconds */ do { - pTrans= ndb->startTransaction(); - if (pTrans == NULL) + Uint64 rows, commits, mem; + Uint32 size; + Uint32 count= 0; + Uint64 sum_rows= 0; + Uint64 sum_commits= 0; + Uint64 sum_row_size= 0; + Uint64 sum_mem= 0; + NdbScanOperation*pOp; + NdbResultSet *rs; + int check; + + if ((pTrans= ndb->startTransaction()) == NULL) { - if (ndb->getNdbError().status == NdbError::TemporaryError && - retries--) - { - my_sleep(retry_sleep); - continue; - } - break; + error= ndb->getNdbError(); + goto retry; + } + + if ((pOp= pTrans->getNdbScanOperation(table)) == NULL) + { + error= pTrans->getNdbError(); + goto retry; } - - NdbScanOperation* pOp= pTrans->getNdbScanOperation(table); - if (pOp == NULL) - break; if (pOp->readTuples(NdbOperation::LM_CommittedRead)) - break; + { + error= pOp->getNdbError(); + goto retry; + } - int check= pOp->interpret_exit_last_row(); - if (check == -1) - break; + if (pOp->interpret_exit_last_row() == -1) + { + error= pOp->getNdbError(); + goto retry; + } - Uint64 rows, commits, mem; - Uint32 size; pOp->getValue(NdbDictionary::Column::ROW_COUNT, (char*)&rows); pOp->getValue(NdbDictionary::Column::COMMIT_COUNT, (char*)&commits); pOp->getValue(NdbDictionary::Column::ROW_SIZE, (char*)&size); pOp->getValue(NdbDictionary::Column::FRAGMENT_MEMORY, (char*)&mem); - check= pTrans->execute(NdbTransaction::NoCommit, - NdbTransaction::AbortOnError, - TRUE); - if (check == -1) + if (pTrans->execute(NdbTransaction::NoCommit, + NdbTransaction::AbortOnError, + TRUE) == -1) { - if (pTrans->getNdbError().status == NdbError::TemporaryError && - retries--) - { - ndb->closeTransaction(pTrans); - pTrans= 0; - my_sleep(retry_sleep); - continue; - } - break; + error= pTrans->getNdbError(); + goto retry; } - - Uint32 count= 0; - Uint64 sum_rows= 0; - Uint64 sum_commits= 0; - Uint64 sum_row_size= 0; - Uint64 sum_mem= 0; + while ((check= pOp->nextResult(TRUE, TRUE)) == 0) { sum_rows+= rows; @@ -5909,7 +5909,10 @@ ndb_get_table_statistics(Ndb* ndb, const char * table, } if (check == -1) - break; + { + error= pOp->getNdbError(); + goto retry; + } pOp->close(TRUE); @@ -5926,12 +5929,21 @@ ndb_get_table_statistics(Ndb* ndb, const char * table, sum_mem, count)); DBUG_RETURN(0); +retry: + if (pTrans) + { + ndb->closeTransaction(pTrans); + pTrans= NULL; + } + if (error.status == NdbError::TemporaryError && retries--) + { + my_sleep(retry_sleep); + continue; + } + break; } while(1); - - if (pTrans) - ndb->closeTransaction(pTrans); - DBUG_PRINT("exit", ("failed")); - DBUG_RETURN(-1); + DBUG_PRINT("exit", ("failed, error %u(%s)", error.code, error.message)); + ERR_RETURN(error); } /* |