summaryrefslogtreecommitdiff
path: root/sql/ha_ndbcluster.cc
diff options
context:
space:
mode:
authorunknown <tomas@poseidon.ndb.mysql.com>2006-06-30 00:02:17 +0200
committerunknown <tomas@poseidon.ndb.mysql.com>2006-06-30 00:02:17 +0200
commit7bc46be138e7c2c95341ceaefb7571c88d4fb414 (patch)
tree18de49d6205d2c3ece88714920d70b7698687fe8 /sql/ha_ndbcluster.cc
parent96a14ba258b0569843fc98d1aad170f99ce79cbb (diff)
parente6297be853f308be20bfe97d1853419855264baf (diff)
downloadmariadb-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.cc100
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);
}
/*