Commit 7e928c5e authored by unknown's avatar unknown

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
parent ad951308
...@@ -649,30 +649,30 @@ counter datavalue ...@@ -649,30 +649,30 @@ counter datavalue
6 newval 6 newval
7 newval 7 newval
8 newval 8 newval
35 newval 9 newval
36 newval 10 newval
37 newval 11 newval
38 newval 12 newval
39 newval 13 newval
40 newval 14 newval
41 newval 15 newval
42 newval 16 newval
43 newval 17 newval
44 newval 18 newval
45 newval 19 newval
46 newval 20 newval
47 newval 21 newval
48 newval 22 newval
49 newval 23 newval
50 newval 24 newval
51 newval 25 newval
52 newval 26 newval
53 newval 27 newval
54 newval 28 newval
55 newval 29 newval
56 newval 30 newval
57 newval 31 newval
58 newval 32 newval
drop table t1; drop table t1;
CREATE TABLE t1 ( b INT ) PACK_KEYS = 0 ENGINE = ndb; CREATE TABLE t1 ( b INT ) PACK_KEYS = 0 ENGINE = ndb;
select * from t1; select * from t1;
......
...@@ -325,21 +325,6 @@ on t1 (c010, c011, c012, c013); ...@@ -325,21 +325,6 @@ on t1 (c010, c011, c012, c013);
drop table t1; 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 # End of 4.1 tests
# On-line alter table # On-line alter table
...@@ -398,3 +383,18 @@ LOAD DATA INFILE 'tmp.dat' INTO TABLE ndb_show_tables; ...@@ -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%'; select 'no_copy' from ndb_show_tables where id = @t1_id and name like '%t1%';
DROP TABLE t1, ndb_show_tables; 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;
...@@ -2464,7 +2464,8 @@ int ha_ndbcluster::write_row(byte *record) ...@@ -2464,7 +2464,8 @@ int ha_ndbcluster::write_row(byte *record)
Uint64 auto_value; Uint64 auto_value;
uint retries= NDB_AUTO_INCREMENT_RETRIES; uint retries= NDB_AUTO_INCREMENT_RETRIES;
do { 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 && } while (ret == -1 &&
--retries && --retries &&
ndb->getNdbError().status == NdbError::TemporaryError); ndb->getNdbError().status == NdbError::TemporaryError);
...@@ -2565,7 +2566,8 @@ int ha_ndbcluster::write_row(byte *record) ...@@ -2565,7 +2566,8 @@ int ha_ndbcluster::write_row(byte *record)
DBUG_PRINT("info", DBUG_PRINT("info",
("Trying to set next auto increment value to %llu", ("Trying to set next auto increment value to %llu",
(ulonglong) next_val)); (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) == -1)
ERR_RETURN(ndb->getNdbError()); ERR_RETURN(ndb->getNdbError());
} }
...@@ -3528,8 +3530,9 @@ void ha_ndbcluster::info(uint flag) ...@@ -3528,8 +3530,9 @@ void ha_ndbcluster::info(uint flag)
if (m_table) if (m_table)
{ {
Ndb *ndb= get_ndb(); 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) auto_increment_value) == -1)
{ {
const NdbError err= ndb->getNdbError(); const NdbError err= ndb->getNdbError();
...@@ -5231,10 +5234,11 @@ ulonglong ha_ndbcluster::get_auto_increment() ...@@ -5231,10 +5234,11 @@ ulonglong ha_ndbcluster::get_auto_increment()
int ret; int ret;
uint retries= NDB_AUTO_INCREMENT_RETRIES; uint retries= NDB_AUTO_INCREMENT_RETRIES;
do { do {
Ndb_tuple_id_range_guard g(m_share);
ret= ret=
m_skip_auto_increment ? m_skip_auto_increment ?
ndb->readAutoIncrementValue(m_table, auto_value) : ndb->readAutoIncrementValue(m_table, g.range, auto_value) :
ndb->getAutoIncrementValue(m_table, auto_value, cache_size); ndb->getAutoIncrementValue(m_table, g.range, auto_value, cache_size);
} while (ret == -1 && } while (ret == -1 &&
--retries && --retries &&
ndb->getNdbError().status == NdbError::TemporaryError); ndb->getNdbError().status == NdbError::TemporaryError);
......
...@@ -106,6 +106,7 @@ typedef struct st_ndbcluster_share { ...@@ -106,6 +106,7 @@ typedef struct st_ndbcluster_share {
ulonglong commit_count; ulonglong commit_count;
char *db; char *db;
char *table_name; char *table_name;
Ndb::TupleIdRange tuple_id_range;
#ifdef HAVE_NDB_BINLOG #ifdef HAVE_NDB_BINLOG
uint32 flags; uint32 flags;
NdbEventOperation *op; NdbEventOperation *op;
...@@ -138,6 +139,19 @@ set_ndb_share_state(NDB_SHARE *share, NDB_SHARE_STATE state) ...@@ -138,6 +139,19 @@ set_ndb_share_state(NDB_SHARE *share, NDB_SHARE_STATE state)
pthread_mutex_unlock(&share->mutex); 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 #ifdef HAVE_NDB_BINLOG
/* NDB_SHARE.flags */ /* NDB_SHARE.flags */
#define NSF_HIDDEN_PK 1 /* table has hidden primary key */ #define NSF_HIDDEN_PK 1 /* table has hidden primary key */
...@@ -725,7 +739,6 @@ static void set_tabname(const char *pathname, char *tabname); ...@@ -725,7 +739,6 @@ static void set_tabname(const char *pathname, char *tabname);
int drop_indexes(Ndb *ndb, TABLE *tab); int drop_indexes(Ndb *ndb, TABLE *tab);
int add_index_handle(THD *thd, NdbDictionary::Dictionary *dict, int add_index_handle(THD *thd, NdbDictionary::Dictionary *dict,
KEY *key_info, const char *index_name, uint index_no); KEY *key_info, const char *index_name, uint index_no);
int initialize_autoincrement(const void *table);
int get_metadata(const char* path); int get_metadata(const char* path);
void release_metadata(THD *thd, Ndb *ndb); void release_metadata(THD *thd, Ndb *ndb);
NDB_INDEX_TYPE get_index_type(uint idx_no) const; NDB_INDEX_TYPE get_index_type(uint idx_no) const;
......
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