mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
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
This commit is contained in:
@ -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);
|
|||||||
|
|
||||||
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;
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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()
|
|||||||
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 {
|
|||||||
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)
|
|||||||
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 @@ private:
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user