manual merge
This commit is contained in:
commit
f075276e9a
@ -457,8 +457,8 @@ void ha_ndbcluster::records_update()
|
|||||||
// if (info->records == ~(ha_rows)0)
|
// if (info->records == ~(ha_rows)0)
|
||||||
{
|
{
|
||||||
Ndb *ndb= get_ndb();
|
Ndb *ndb= get_ndb();
|
||||||
ndb->setDatabaseName(m_dbname);
|
|
||||||
struct Ndb_statistics stat;
|
struct Ndb_statistics stat;
|
||||||
|
ndb->setDatabaseName(m_dbname);
|
||||||
if (ndb_get_table_statistics(ndb, m_table, &stat) == 0)
|
if (ndb_get_table_statistics(ndb, m_table, &stat) == 0)
|
||||||
{
|
{
|
||||||
stats.mean_rec_length= stat.row_size;
|
stats.mean_rec_length= stat.row_size;
|
||||||
@ -3594,6 +3594,7 @@ void ha_ndbcluster::info(uint flag)
|
|||||||
Ndb *ndb= get_ndb();
|
Ndb *ndb= get_ndb();
|
||||||
ndb->setDatabaseName(m_dbname);
|
ndb->setDatabaseName(m_dbname);
|
||||||
struct Ndb_statistics stat;
|
struct Ndb_statistics stat;
|
||||||
|
ndb->setDatabaseName(m_dbname);
|
||||||
if (current_thd->variables.ndb_use_exact_count &&
|
if (current_thd->variables.ndb_use_exact_count &&
|
||||||
ndb_get_table_statistics(ndb, m_table, &stat) == 0)
|
ndb_get_table_statistics(ndb, m_table, &stat) == 0)
|
||||||
{
|
{
|
||||||
@ -7403,6 +7404,7 @@ ndb_get_table_statistics(Ndb* ndb, const NDBTAB *ndbtab,
|
|||||||
DBUG_ENTER("ndb_get_table_statistics");
|
DBUG_ENTER("ndb_get_table_statistics");
|
||||||
DBUG_PRINT("enter", ("table: %s", ndbtab->getName()));
|
DBUG_PRINT("enter", ("table: %s", ndbtab->getName()));
|
||||||
NdbTransaction* pTrans;
|
NdbTransaction* pTrans;
|
||||||
|
NdbError error;
|
||||||
int retries= 10;
|
int retries= 10;
|
||||||
int retry_sleep= 30 * 1000; /* 30 milliseconds */
|
int retry_sleep= 30 * 1000; /* 30 milliseconds */
|
||||||
|
|
||||||
@ -7410,57 +7412,51 @@ ndb_get_table_statistics(Ndb* ndb, const NDBTAB *ndbtab,
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
pTrans= ndb->startTransaction();
|
|
||||||
if (pTrans == NULL)
|
|
||||||
{
|
|
||||||
if (ndb->getNdbError().status == NdbError::TemporaryError &&
|
|
||||||
retries--)
|
|
||||||
{
|
|
||||||
my_sleep(retry_sleep);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ERR_RETURN(ndb->getNdbError());
|
|
||||||
}
|
|
||||||
|
|
||||||
NdbScanOperation* pOp= pTrans->getNdbScanOperation(ndbtab);
|
|
||||||
if (pOp == NULL)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (pOp->readTuples(NdbOperation::LM_CommittedRead))
|
|
||||||
break;
|
|
||||||
|
|
||||||
int check= pOp->interpret_exit_last_row();
|
|
||||||
if (check == -1)
|
|
||||||
break;
|
|
||||||
|
|
||||||
Uint64 rows, commits, mem;
|
Uint64 rows, commits, mem;
|
||||||
Uint32 size;
|
Uint32 size;
|
||||||
|
Uint64 sum_rows= 0;
|
||||||
|
Uint64 sum_commits= 0;
|
||||||
|
NdbScanOperation*pOp;
|
||||||
|
NdbResultSet *rs;
|
||||||
|
int check;
|
||||||
|
|
||||||
|
if ((pTrans= ndb->startTransaction()) == NULL)
|
||||||
|
{
|
||||||
|
error= ndb->getNdbError();
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((pOp= pTrans->getNdbScanOperation(ndbtab)) == NULL)
|
||||||
|
{
|
||||||
|
error= pTrans->getNdbError();
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pOp->readTuples(NdbOperation::LM_CommittedRead))
|
||||||
|
{
|
||||||
|
error= pOp->getNdbError();
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pOp->interpret_exit_last_row() == -1)
|
||||||
|
{
|
||||||
|
error= pOp->getNdbError();
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
pOp->getValue(NdbDictionary::Column::ROW_COUNT, (char*)&rows);
|
pOp->getValue(NdbDictionary::Column::ROW_COUNT, (char*)&rows);
|
||||||
pOp->getValue(NdbDictionary::Column::COMMIT_COUNT, (char*)&commits);
|
pOp->getValue(NdbDictionary::Column::COMMIT_COUNT, (char*)&commits);
|
||||||
pOp->getValue(NdbDictionary::Column::ROW_SIZE, (char*)&size);
|
pOp->getValue(NdbDictionary::Column::ROW_SIZE, (char*)&size);
|
||||||
pOp->getValue(NdbDictionary::Column::FRAGMENT_MEMORY, (char*)&mem);
|
pOp->getValue(NdbDictionary::Column::FRAGMENT_MEMORY, (char*)&mem);
|
||||||
|
|
||||||
check= pTrans->execute(NdbTransaction::NoCommit,
|
if (pTrans->execute(NdbTransaction::NoCommit,
|
||||||
NdbTransaction::AbortOnError,
|
NdbTransaction::AbortOnError,
|
||||||
TRUE);
|
TRUE) == -1)
|
||||||
if (check == -1)
|
|
||||||
{
|
{
|
||||||
if (pTrans->getNdbError().status == NdbError::TemporaryError &&
|
error= pTrans->getNdbError();
|
||||||
retries--)
|
goto retry;
|
||||||
{
|
|
||||||
ndb->closeTransaction(pTrans);
|
|
||||||
pTrans= 0;
|
|
||||||
my_sleep(retry_sleep);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
while ((check= pOp->nextResult(TRUE, TRUE)) == 0)
|
||||||
{
|
{
|
||||||
sum_rows+= rows;
|
sum_rows+= rows;
|
||||||
@ -7472,7 +7468,10 @@ ndb_get_table_statistics(Ndb* ndb, const NDBTAB *ndbtab,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (check == -1)
|
if (check == -1)
|
||||||
break;
|
{
|
||||||
|
error= pOp->getNdbError();
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
pOp->close(TRUE);
|
pOp->close(TRUE);
|
||||||
|
|
||||||
@ -7489,12 +7488,21 @@ ndb_get_table_statistics(Ndb* ndb, const NDBTAB *ndbtab,
|
|||||||
sum_mem, count));
|
sum_mem, count));
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
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);
|
} while(1);
|
||||||
|
DBUG_PRINT("exit", ("failed, error %u(%s)", error.code, error.message));
|
||||||
if (pTrans)
|
ERR_RETURN(error);
|
||||||
ndb->closeTransaction(pTrans);
|
|
||||||
DBUG_PRINT("exit", ("failed"));
|
|
||||||
DBUG_RETURN(-1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user