1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

bug#12118 - ndb alter table data loss

Split table version into 2 (major, minor)
  Impl. signaling to API when table has been altered
  Allow running transactions to use any minor number for transactions


mysql-test/r/ndb_alter_table.result:
  Allow running transactions to use old table definition when possible.
mysql-test/t/ndb_alter_table.test:
  Allow running transactions to use old table definition when possible.
ndb/include/kernel/BlockNumbers.h:
  remove GREP
ndb/include/kernel/GlobalSignalNumbers.h:
  Add ALTER_TABL_REP and API_BROADCAST_REP
ndb/include/kernel/kernel_types.h:
  table_version_major
ndb/include/kernel/signaldata/AlterTable.hpp:
  New error code for alter table during rolling upgrade
ndb/include/ndbapi/NdbDictionary.hpp:
  Add state on table object to represent an altered but still valid table object
ndb/src/common/debugger/BlockNames.cpp:
  remove GREP
ndb/src/common/util/version.c:
  Fix upgrades
ndb/src/kernel/SimBlockList.cpp:
  remove GREP
ndb/src/kernel/blocks/Makefile.am:
  remove GREP
ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp:
  remove GREP
ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
  Split tableSchemaVersion into 2 part
  24 bit real version
   8 bit for online alter table where old table definition is still usable
ndb/src/kernel/blocks/dbdict/Dbdict.hpp:
  Check for same ndb versions
ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp:
  Update schema printer
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  remove grep
ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
  1) Use table_ version_major when checking table version
  2) Dummy fix for BUG that tableSchemaVersion is only 16 bit in LQHKEYREQ
ndb/src/kernel/blocks/dbtc/Dbtc.hpp:
  1) Use table_ version_major when checking table version
  2) Dummy fix for BUG that tableSchemaVersion is only 16 bit in LQHKEYREQ
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
  1) Use table_ version_major when checking table version
  2) Dummy fix for BUG that tableSchemaVersion is only 16 bit in LQHKEYREQ
ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp:
  remove GREP
ndb/src/kernel/blocks/qmgr/Qmgr.hpp:
  Add support for sending REP to ALL api nodes
ndb/src/kernel/blocks/qmgr/QmgrInit.cpp:
  Add support for sending REP to ALL api nodes
ndb/src/kernel/blocks/qmgr/QmgrMain.cpp:
  Add support for sending REP to ALL api nodes
ndb/src/kernel/blocks/suma/Suma.cpp:
  remove GREP
ndb/src/mgmsrv/MgmtSrvr.cpp:
  remove GREP
ndb/src/ndbapi/DictCache.cpp:
  Add support for alter_table_rep
    by setting status to Altered
  
  NOTE special handling of tables in state RETREIVING
ndb/src/ndbapi/DictCache.hpp:
  Add support for alter_table_rep
    by setting status to Altered
  
  NOTE special handling of tables in state RETREIVING
ndb/src/ndbapi/NdbDictionaryImpl.cpp:
  Change alter table so that remove from global cache is used wo/ retreiving it from there first
    as ALTER_TABLE_REP might already have changed the table object...
ndb/src/ndbapi/TransporterFacade.cpp:
  Add support for ALTER_TABLE_REP
sql/ha_ndbcluster.cc:
  Allow running transactions to use tables in state ALTERED...but new transactions may not...
ndb/include/kernel/signaldata/ApiBroadcast.hpp:
  New BitKeeper file ``ndb/include/kernel/signaldata/ApiBroadcast.hpp''
This commit is contained in:
unknown
2005-08-18 14:02:25 +02:00
parent c8cd901b33
commit c7744c6df5
31 changed files with 339 additions and 124 deletions

View File

@ -179,8 +179,24 @@ a b c
2 two two
alter table t1 drop index c;
select * from t1 where b = 'two';
ERROR HY000: Table definition has changed, please retry transaction
a b c
2 two two
select * from t1 where b = 'two';
a b c
2 two two
drop table t1;
create table t3 (a int primary key) engine=ndbcluster;
begin;
insert into t3 values (1);
alter table t3 rename t4;
delete from t3;
insert into t3 values (1);
commit;
select * from t3;
ERROR HY000: Can't lock file (errno: 155)
select * from t4;
a
1
drop table t4;
show tables;
Tables_in_test

View File

@ -144,7 +144,6 @@ select * from t1 where b = 'two';
connection server1;
alter table t1 drop index c;
connection server2;
--error 1105
select * from t1 where b = 'two';
select * from t1 where b = 'two';
connection server1;
@ -172,3 +171,28 @@ drop table t1;
#truncate table t2;
#select count(*) from t2;
#drop table t2;
connection server1;
create table t3 (a int primary key) engine=ndbcluster;
connection server2;
begin;
insert into t3 values (1);
connection server1;
alter table t3 rename t4;
connection server2;
# This should work as transaction is ongoing...
delete from t3;
insert into t3 values (1);
commit;
# This should fail as its a new transaction
--error 1015
select * from t3;
select * from t4;
drop table t4;
show tables;
connection server1;