Commit 2aa3ff8e authored by unknown's avatar unknown
Browse files

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 75839941
Loading
Loading
Loading
Loading
+24 −24
Original line number Diff line number Diff line
@@ -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;
+15 −15
Original line number Diff line number Diff line
@@ -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;
+9 −5
Original line number Diff line number Diff line
@@ -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);
+14 −1
Original line number Diff line number Diff line
@@ -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 @@ static void set_tabname(const char *pathname, char *tabname);
  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;