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
|
||||
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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user