diff options
author | unknown <pekka@mysql.com> | 2006-05-25 12:13:47 +0200 |
---|---|---|
committer | unknown <pekka@mysql.com> | 2006-05-25 12:13:47 +0200 |
commit | 2aa3ff8eb90b8fcbee4b690aa21e9fc8791b0538 (patch) | |
tree | 937d71b4f22b11982af7e16fc53a8f40e022836a | |
parent | 758399418589c34fc85fb27696cd73f863198224 (diff) | |
download | mariadb-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.result | 48 | ||||
-rw-r--r-- | mysql-test/t/ndb_alter_table.test | 30 | ||||
-rw-r--r-- | sql/ha_ndbcluster.cc | 14 | ||||
-rw-r--r-- | sql/ha_ndbcluster.h | 15 |
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; |