summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <stewart@willster.(none)>2006-10-25 18:41:17 +1000
committerunknown <stewart@willster.(none)>2006-10-25 18:41:17 +1000
commit8f628213c63aedcae00298a967eb5e697c39b4bb (patch)
treefc9e75a7fe3953924e9bd58f10a46e440fa82cbf
parent0ab6fd5f3edfaf75de01a89695f2d1236c23f06b (diff)
parente2ea6f70b3e0b1f7e82b384e79fc992557ca8e2d (diff)
downloadmariadb-git-8f628213c63aedcae00298a967eb5e697c39b4bb.tar.gz
Merge willster.(none):/home/stewart/Documents/MySQL/5.0/ndb
into willster.(none):/home/stewart/Documents/MySQL/5.1/ndb sql/sql_select.cc: Auto merged storage/ndb/src/kernel/blocks/backup/Backup.cpp: Auto merged storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: Auto merged storage/ndb/src/ndbapi/NdbTransaction.cpp: Auto merged mysql-test/r/ndb_multi.result: merge result file mysql-test/t/ndb_multi.test: merge test sql/ha_ndbcluster.cc: merge ndb_get_table_statistics definition and usage sql/ha_ndbcluster.h: merge
-rw-r--r--mysql-test/r/ndb_multi.result1
-rw-r--r--mysql-test/t/ndb_multi.test7
-rw-r--r--sql/ha_ndbcluster.cc50
-rw-r--r--sql/ha_ndbcluster.h7
4 files changed, 46 insertions, 19 deletions
diff --git a/mysql-test/r/ndb_multi.result b/mysql-test/r/ndb_multi.result
index c73d09b6541..73012fc1105 100644
--- a/mysql-test/r/ndb_multi.result
+++ b/mysql-test/r/ndb_multi.result
@@ -32,7 +32,6 @@ insert into t1 value (2);
select * from t1;
a
2
-flush status;
select * from t1;
a
2
diff --git a/mysql-test/t/ndb_multi.test b/mysql-test/t/ndb_multi.test
index a8253b786d0..0f098c96fa8 100644
--- a/mysql-test/t/ndb_multi.test
+++ b/mysql-test/t/ndb_multi.test
@@ -39,12 +39,7 @@ drop table t1;
create table t1 (a int) engine=ndbcluster;
insert into t1 value (2);
connection server1;
-## Currently a retry is required remotely
-#--error 1412
-#select * from t1;
-#show warnings;
-#flush table t1;
-# Table definition change should be propagated automatically
+select * from t1;
select * from t1;
# Connect to server2 and use the tables from there
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 4ebebd853ef..4b7ccc37365 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -152,8 +152,7 @@ static byte *ndbcluster_get_key(NDB_SHARE *share,uint *length,
static int rename_share(NDB_SHARE *share, const char *new_key);
#endif
static void ndb_set_fragmentation(NDBTAB &tab, TABLE *table, uint pk_len);
-
-static int ndb_get_table_statistics(Ndb*, const NDBTAB *,
+static int ndb_get_table_statistics(ha_ndbcluster*, bool, Ndb*, const NDBTAB *,
struct Ndb_statistics *);
@@ -485,7 +484,8 @@ int ha_ndbcluster::records_update()
Ndb *ndb= get_ndb();
struct Ndb_statistics stat;
ndb->setDatabaseName(m_dbname);
- if ((result= ndb_get_table_statistics(ndb, m_table, &stat)) == 0)
+ result= ndb_get_table_statistics(this, true, ndb, m_table, &stat);
+ if (result == 0)
{
stats.mean_rec_length= stat.row_size;
stats.data_file_length= stat.fragment_memory;
@@ -497,7 +497,8 @@ int ha_ndbcluster::records_update()
if (get_thd_ndb(thd)->error)
info->no_uncommitted_rows_count= 0;
}
- stats.records= info->records+ info->no_uncommitted_rows_count;
+ if(result==0)
+ stats.records= info->records+ info->no_uncommitted_rows_count;
DBUG_RETURN(result);
}
@@ -3682,7 +3683,8 @@ int ha_ndbcluster::info(uint flag)
struct Ndb_statistics stat;
ndb->setDatabaseName(m_dbname);
if (current_thd->variables.ndb_use_exact_count &&
- (result= ndb_get_table_statistics(ndb, m_table, &stat)) == 0)
+ (result= ndb_get_table_statistics(this, true, ndb, m_table, &stat))
+ == 0)
{
stats.mean_rec_length= stat.row_size;
stats.data_file_length= stat.fragment_memory;
@@ -5754,7 +5756,15 @@ int ha_ndbcluster::open(const char *name, int mode, uint test_if_locked)
res= get_metadata(name);
if (!res)
- info(HA_STATUS_VARIABLE | HA_STATUS_CONST);
+ {
+ Ndb *ndb= get_ndb();
+ ndb->setDatabaseName(m_dbname);
+ struct Ndb_statistics stat;
+ res= ndb_get_table_statistics(NULL, false, ndb, m_tabname, &stat);
+ records= stat.row_count;
+ if(!res)
+ res= info(HA_STATUS_CONST);
+ }
#ifdef HAVE_NDB_BINLOG
if (!ndb_binlog_tables_inited && ndb_binlog_running)
@@ -6980,7 +6990,7 @@ uint ndb_get_commitcount(THD *thd, char *dbname, char *tabname,
{
Ndb_table_guard ndbtab_g(ndb->getDictionary(), tabname);
if (ndbtab_g.get_table() == 0
- || ndb_get_table_statistics(ndb, ndbtab_g.get_table(), &stat))
+ || ndb_get_table_statistics(NULL, false, ndb, ndbtab_g.get_table(), &stat))
{
free_share(&share);
DBUG_RETURN(1);
@@ -7546,12 +7556,13 @@ void ndbcluster_free_share(NDB_SHARE **share, bool have_lock)
static
int
-ndb_get_table_statistics(Ndb* ndb, const NDBTAB *ndbtab,
+ndb_get_table_statistics(ha_ndbcluster* file, bool report_error, Ndb* ndb, const NDBTAB *ndbtab,
struct Ndb_statistics * ndbstat)
{
NdbTransaction* pTrans;
NdbError error;
int retries= 10;
+ int reterr= 0;
int retry_sleep= 30 * 1000; /* 30 milliseconds */
char buff[22], buff2[22], buff3[22], buff4[22];
DBUG_ENTER("ndb_get_table_statistics");
@@ -7647,6 +7658,22 @@ ndb_get_table_statistics(Ndb* ndb, const NDBTAB *ndbtab,
DBUG_RETURN(0);
retry:
+ if(report_error)
+ {
+ if (file)
+ {
+ reterr= file->ndb_err(pTrans);
+ }
+ else
+ {
+ const NdbError& tmp= error;
+ ERR_PRINT(tmp);
+ reterr= ndb_to_mysql_error(&tmp);
+ }
+ }
+ else
+ reterr= error.code;
+
if (pTrans)
{
ndb->closeTransaction(pTrans);
@@ -7659,8 +7686,9 @@ retry:
}
break;
} while(1);
- DBUG_PRINT("exit", ("failed, error %u(%s)", error.code, error.message));
- ERR_RETURN(error);
+ DBUG_PRINT("exit", ("failed, reterr: %u, NdbError %u(%s)", reterr,
+ error.code, error.message));
+ DBUG_RETURN(reterr);
}
/*
@@ -8318,7 +8346,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
{
Ndb_table_guard ndbtab_g(ndb->getDictionary(), share->table_name);
if (ndbtab_g.get_table() &&
- ndb_get_table_statistics(ndb, ndbtab_g.get_table(), &stat) == 0)
+ ndb_get_table_statistics(NULL, false, ndb, ndbtab_g.get_table(), &stat) == 0)
{
char buff[22], buff2[22];
DBUG_PRINT("ndb_util_thread",
diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h
index f0903d3a233..4f0db20d0b0 100644
--- a/sql/ha_ndbcluster.h
+++ b/sql/ha_ndbcluster.h
@@ -772,6 +772,12 @@ static void set_tabname(const char *pathname, char *tabname);
void cond_pop();
uint8 table_cache_type();
+
+ /*
+ * Internal to ha_ndbcluster, used by C functions
+ */
+ int ndb_err(NdbTransaction*);
+
my_bool register_query_cache_table(THD *thd, char *table_key,
uint key_length,
qc_engine_callback *engine_callback,
@@ -868,7 +874,6 @@ private:
ulonglong nb_desired_values,
ulonglong *first_value,
ulonglong *nb_reserved_values);
- int ndb_err(NdbTransaction*);
bool uses_blob_value();
char *update_table_comment(const char * comment);