Loading sql/ha_ndbcluster.cc +56 −44 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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) { if (ndb->getNdbError().status == NdbError::TemporaryError && retries--) 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) { my_sleep(retry_sleep); continue; } break; error= ndb->getNdbError(); goto retry; } NdbScanOperation* pOp= pTrans->getNdbScanOperation(table); if (pOp == NULL) break; if ((pOp= pTrans->getNdbScanOperation(table)) == NULL) { error= pTrans->getNdbError(); goto retry; } 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, if (pTrans->execute(NdbTransaction::NoCommit, NdbTransaction::AbortOnError, TRUE); if (check == -1) 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; Loading @@ -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); Loading @@ -5926,12 +5929,21 @@ ndb_get_table_statistics(Ndb* ndb, const char * table, sum_mem, count)); DBUG_RETURN(0); } while(1); retry: if (pTrans) { ndb->closeTransaction(pTrans); DBUG_PRINT("exit", ("failed")); DBUG_RETURN(-1); pTrans= NULL; } if (error.status == NdbError::TemporaryError && retries--) { my_sleep(retry_sleep); continue; } break; } while(1); DBUG_PRINT("exit", ("failed, error %u(%s)", error.code, error.message)); ERR_RETURN(error); } /* Loading Loading
sql/ha_ndbcluster.cc +56 −44 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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) { if (ndb->getNdbError().status == NdbError::TemporaryError && retries--) 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) { my_sleep(retry_sleep); continue; } break; error= ndb->getNdbError(); goto retry; } NdbScanOperation* pOp= pTrans->getNdbScanOperation(table); if (pOp == NULL) break; if ((pOp= pTrans->getNdbScanOperation(table)) == NULL) { error= pTrans->getNdbError(); goto retry; } 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, if (pTrans->execute(NdbTransaction::NoCommit, NdbTransaction::AbortOnError, TRUE); if (check == -1) 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; Loading @@ -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); Loading @@ -5926,12 +5929,21 @@ ndb_get_table_statistics(Ndb* ndb, const char * table, sum_mem, count)); DBUG_RETURN(0); } while(1); retry: if (pTrans) { ndb->closeTransaction(pTrans); DBUG_PRINT("exit", ("failed")); DBUG_RETURN(-1); pTrans= NULL; } if (error.status == NdbError::TemporaryError && retries--) { my_sleep(retry_sleep); continue; } break; } while(1); DBUG_PRINT("exit", ("failed, error %u(%s)", error.code, error.message)); ERR_RETURN(error); } /* Loading