summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <pekka@mysql.com>2006-05-25 12:13:47 +0200
committerunknown <pekka@mysql.com>2006-05-25 12:13:47 +0200
commit2aa3ff8eb90b8fcbee4b690aa21e9fc8791b0538 (patch)
tree937d71b4f22b11982af7e16fc53a8f40e022836a
parent758399418589c34fc85fb27696cd73f863198224 (diff)
downloadmariadb-git-2aa3ff8eb90b8fcbee4b690aa21e9fc8791b0538.tar.gz
ndb - bug#14509 v5.1 part 2/2 : handler level
mysql-test/r/ndb_basic.result: put auto-incr range under NDB_SHARE until otherwise decided.. makes auto-incr process-global per table. each use requires mutex mysql-test/t/ndb_alter_table.test: put auto-incr range under NDB_SHARE until otherwise decided.. makes auto-incr process-global per table. each use requires mutex sql/ha_ndbcluster.cc: put auto-incr range under NDB_SHARE until otherwise decided.. makes auto-incr process-global per table. each use requires mutex sql/ha_ndbcluster.h: put auto-incr range under NDB_SHARE until otherwise decided.. makes auto-incr process-global per table. each use requires mutex
-rw-r--r--mysql-test/r/ndb_basic.result48
-rw-r--r--mysql-test/t/ndb_alter_table.test30
-rw-r--r--sql/ha_ndbcluster.cc14
-rw-r--r--sql/ha_ndbcluster.h15
4 files changed, 62 insertions, 45 deletions
diff --git a/mysql-test/r/ndb_basic.result b/mysql-test/r/ndb_basic.result
index 9477caf97ab..997a94d0afa 100644
--- a/mysql-test/r/ndb_basic.result
+++ b/mysql-test/r/ndb_basic.result
@@ -649,30 +649,30 @@ counter datavalue
6 newval
7 newval
8 newval
-35 newval
-36 newval
-37 newval
-38 newval
-39 newval
-40 newval
-41 newval
-42 newval
-43 newval
-44 newval
-45 newval
-46 newval
-47 newval
-48 newval
-49 newval
-50 newval
-51 newval
-52 newval
-53 newval
-54 newval
-55 newval
-56 newval
-57 newval
-58 newval
+9 newval
+10 newval
+11 newval
+12 newval
+13 newval
+14 newval
+15 newval
+16 newval
+17 newval
+18 newval
+19 newval
+20 newval
+21 newval
+22 newval
+23 newval
+24 newval
+25 newval
+26 newval
+27 newval
+28 newval
+29 newval
+30 newval
+31 newval
+32 newval
drop table t1;
CREATE TABLE t1 ( b INT ) PACK_KEYS = 0 ENGINE = ndb;
select * from t1;
diff --git a/mysql-test/t/ndb_alter_table.test b/mysql-test/t/ndb_alter_table.test
index cd5c4819c51..8e3b4a6ca89 100644
--- a/mysql-test/t/ndb_alter_table.test
+++ b/mysql-test/t/ndb_alter_table.test
@@ -325,21 +325,6 @@ on t1 (c010, c011, c012, c013);
drop table t1;
-# simple test that auto incr is not lost at rename or alter
-create table t1 (a int primary key auto_increment, b int) engine=ndb;
-insert into t1 (b) values (101),(102),(103);
-select * from t1 where a = 3;
-alter table t1 rename t2;
-insert into t2 (b) values (201),(202),(203);
-select * from t2 where a = 6;
-alter table t2 add c int;
-insert into t2 (b) values (301),(302),(303);
-select * from t2 where a = 9;
-alter table t2 rename t1;
-insert into t1 (b) values (401),(402),(403);
-select * from t1 where a = 12;
-drop table t1;
-
# End of 4.1 tests
# On-line alter table
@@ -398,3 +383,18 @@ LOAD DATA INFILE 'tmp.dat' INTO TABLE ndb_show_tables;
select 'no_copy' from ndb_show_tables where id = @t1_id and name like '%t1%';
DROP TABLE t1, ndb_show_tables;
+
+# simple test that auto incr is not lost at rename or alter
+create table t1 (a int primary key auto_increment, b int) engine=ndb;
+insert into t1 (b) values (101),(102),(103);
+select * from t1 where a = 3;
+alter table t1 rename t2;
+insert into t2 (b) values (201),(202),(203);
+select * from t2 where a = 6;
+alter table t2 add c int;
+insert into t2 (b) values (301),(302),(303);
+select * from t2 where a = 9;
+alter table t2 rename t1;
+insert into t1 (b) values (401),(402),(403);
+select * from t1 where a = 12;
+drop table t1;
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index a17416e006d..0baf2e09473 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -2464,7 +2464,8 @@ int ha_ndbcluster::write_row(byte *record)
Uint64 auto_value;
uint retries= NDB_AUTO_INCREMENT_RETRIES;
do {
- ret= ndb->getAutoIncrementValue(m_table, auto_value, 1);
+ Ndb_tuple_id_range_guard g(m_share);
+ ret= ndb->getAutoIncrementValue(m_table, g.range, auto_value, 1);
} while (ret == -1 &&
--retries &&
ndb->getNdbError().status == NdbError::TemporaryError);
@@ -2565,7 +2566,8 @@ int ha_ndbcluster::write_row(byte *record)
DBUG_PRINT("info",
("Trying to set next auto increment value to %llu",
(ulonglong) next_val));
- if (ndb->setAutoIncrementValue(m_table, next_val, TRUE)
+ Ndb_tuple_id_range_guard g(m_share);
+ if (ndb->setAutoIncrementValue(m_table, g.range, next_val, TRUE)
== -1)
ERR_RETURN(ndb->getNdbError());
}
@@ -3528,8 +3530,9 @@ void ha_ndbcluster::info(uint flag)
if (m_table)
{
Ndb *ndb= get_ndb();
+ Ndb_tuple_id_range_guard g(m_share);
- if (ndb->readAutoIncrementValue(m_table,
+ if (ndb->readAutoIncrementValue(m_table, g.range,
auto_increment_value) == -1)
{
const NdbError err= ndb->getNdbError();
@@ -5231,10 +5234,11 @@ ulonglong ha_ndbcluster::get_auto_increment()
int ret;
uint retries= NDB_AUTO_INCREMENT_RETRIES;
do {
+ Ndb_tuple_id_range_guard g(m_share);
ret=
m_skip_auto_increment ?
- ndb->readAutoIncrementValue(m_table, auto_value) :
- ndb->getAutoIncrementValue(m_table, auto_value, cache_size);
+ ndb->readAutoIncrementValue(m_table, g.range, auto_value) :
+ ndb->getAutoIncrementValue(m_table, g.range, auto_value, cache_size);
} while (ret == -1 &&
--retries &&
ndb->getNdbError().status == NdbError::TemporaryError);
diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h
index f407cb0090f..f113994f3b2 100644
--- a/sql/ha_ndbcluster.h
+++ b/sql/ha_ndbcluster.h
@@ -106,6 +106,7 @@ typedef struct st_ndbcluster_share {
ulonglong commit_count;
char *db;
char *table_name;
+ Ndb::TupleIdRange tuple_id_range;
#ifdef HAVE_NDB_BINLOG
uint32 flags;
NdbEventOperation *op;
@@ -138,6 +139,19 @@ set_ndb_share_state(NDB_SHARE *share, NDB_SHARE_STATE state)
pthread_mutex_unlock(&share->mutex);
}
+struct Ndb_tuple_id_range_guard {
+ Ndb_tuple_id_range_guard(NDB_SHARE* _share) :
+ share(_share),
+ range(share->tuple_id_range) {
+ pthread_mutex_lock(&share->mutex);
+ }
+ ~Ndb_tuple_id_range_guard() {
+ pthread_mutex_unlock(&share->mutex);
+ }
+ NDB_SHARE* share;
+ Ndb::TupleIdRange& range;
+};
+
#ifdef HAVE_NDB_BINLOG
/* NDB_SHARE.flags */
#define NSF_HIDDEN_PK 1 /* table has hidden primary key */
@@ -725,7 +739,6 @@ private:
int drop_indexes(Ndb *ndb, TABLE *tab);
int add_index_handle(THD *thd, NdbDictionary::Dictionary *dict,
KEY *key_info, const char *index_name, uint index_no);
- int initialize_autoincrement(const void *table);
int get_metadata(const char* path);
void release_metadata(THD *thd, Ndb *ndb);
NDB_INDEX_TYPE get_index_type(uint idx_no) const;