ndb uncomitted row count cont'd, applying new fix since last one was no good

parent 1d3d3241
...@@ -363,6 +363,8 @@ Thd_ndb::~Thd_ndb() ...@@ -363,6 +363,8 @@ Thd_ndb::~Thd_ndb()
void void
Thd_ndb::init_open_tables() Thd_ndb::init_open_tables()
{ {
count= 0;
error= 0;
my_hash_reset(&open_tables); my_hash_reset(&open_tables);
} }
...@@ -380,8 +382,17 @@ Thd_ndb::get_open_table(THD *thd, const void *key) ...@@ -380,8 +382,17 @@ Thd_ndb::get_open_table(THD *thd, const void *key)
thd_ndb_share= (THD_NDB_SHARE *) alloc_root(&thd->transaction.mem_root, thd_ndb_share= (THD_NDB_SHARE *) alloc_root(&thd->transaction.mem_root,
sizeof(THD_NDB_SHARE)); sizeof(THD_NDB_SHARE));
thd_ndb_share->key= key; thd_ndb_share->key= key;
thd_ndb_share->stat.last_count= count;
thd_ndb_share->stat.no_uncommitted_rows_count= 0;
thd_ndb_share->stat.records == ~(ha_rows)0;
my_hash_insert(&open_tables, (byte *)thd_ndb_share); my_hash_insert(&open_tables, (byte *)thd_ndb_share);
} }
else if (thd_ndb_share->stat.last_count != count)
{
thd_ndb_share->stat.last_count= count;
thd_ndb_share->stat.no_uncommitted_rows_count= 0;
thd_ndb_share->stat.records == ~(ha_rows)0;
}
DBUG_PRINT("exit", ("thd_ndb_share: 0x%x key: 0x%x", thd_ndb_share, key)); DBUG_PRINT("exit", ("thd_ndb_share: 0x%x key: 0x%x", thd_ndb_share, key));
DBUG_RETURN(thd_ndb_share); DBUG_RETURN(thd_ndb_share);
} }
...@@ -444,25 +455,6 @@ void ha_ndbcluster::no_uncommitted_rows_execute_failure() ...@@ -444,25 +455,6 @@ void ha_ndbcluster::no_uncommitted_rows_execute_failure()
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
void ha_ndbcluster::no_uncommitted_rows_init(THD *thd)
{
if (m_ha_not_exact_count)
return;
DBUG_ENTER("ha_ndbcluster::no_uncommitted_rows_init");
struct Ndb_local_table_statistics *info= m_table_info;
Thd_ndb *thd_ndb= get_thd_ndb(thd);
if (info->last_count != thd_ndb->count)
{
info->last_count= thd_ndb->count;
info->no_uncommitted_rows_count= 0;
info->records= ~(ha_rows)0;
DBUG_PRINT("info", ("id=%d, no_uncommitted_rows_count=%d",
((const NDBTAB *)m_table)->getTableId(),
info->no_uncommitted_rows_count));
}
DBUG_VOID_RETURN;
}
void ha_ndbcluster::no_uncommitted_rows_update(int c) void ha_ndbcluster::no_uncommitted_rows_update(int c)
{ {
if (m_ha_not_exact_count) if (m_ha_not_exact_count)
...@@ -3946,7 +3938,6 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type) ...@@ -3946,7 +3938,6 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
if (trans == NULL) if (trans == NULL)
ERR_RETURN(ndb->getNdbError()); ERR_RETURN(ndb->getNdbError());
thd_ndb->init_open_tables(); thd_ndb->init_open_tables();
no_uncommitted_rows_reset(thd);
thd_ndb->stmt= trans; thd_ndb->stmt= trans;
trans_register_ha(thd, FALSE, &ndbcluster_hton); trans_register_ha(thd, FALSE, &ndbcluster_hton);
} }
...@@ -3962,7 +3953,6 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type) ...@@ -3962,7 +3953,6 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
if (trans == NULL) if (trans == NULL)
ERR_RETURN(ndb->getNdbError()); ERR_RETURN(ndb->getNdbError());
thd_ndb->init_open_tables(); thd_ndb->init_open_tables();
no_uncommitted_rows_reset(thd);
thd_ndb->all= trans; thd_ndb->all= trans;
trans_register_ha(thd, TRUE, &ndbcluster_hton); trans_register_ha(thd, TRUE, &ndbcluster_hton);
...@@ -4041,7 +4031,6 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type) ...@@ -4041,7 +4031,6 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
} }
m_thd_ndb_share= thd_ndb->get_open_table(thd, m_table); m_thd_ndb_share= thd_ndb->get_open_table(thd, m_table);
m_table_info= &m_thd_ndb_share->stat; m_table_info= &m_thd_ndb_share->stat;
no_uncommitted_rows_init(thd);
} }
else else
{ {
......
...@@ -809,7 +809,6 @@ static void set_tabname(const char *pathname, char *tabname); ...@@ -809,7 +809,6 @@ static void set_tabname(const char *pathname, char *tabname);
void records_update(); void records_update();
void no_uncommitted_rows_execute_failure(); void no_uncommitted_rows_execute_failure();
void no_uncommitted_rows_update(int); void no_uncommitted_rows_update(int);
void no_uncommitted_rows_init(THD *);
void no_uncommitted_rows_reset(THD *); void no_uncommitted_rows_reset(THD *);
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment