polardbxengine/mysql-test/suite/ndb/t/ndb_fully_replicated_addnod...

266 lines
12 KiB
Plaintext

-- source include/have_ndb.inc
CREATE TABLE t1 (
a char(10) CHARSET latin1 NOT NULL,
e varbinary(3000) not null,
b int,
c blob,
d varbinary(26000),
primary key(e,a),
unique key (b)
) comment='NDB_TABLE=FULLY_REPLICATED=1' ENGINE=ndbcluster;
use ndbinfo;
select tab_partitions, tab_fragments from table_distribution_status as tds join dict_obj_info as doi where tds.table_id = doi.id and doi.fq_name = 'test/def/t1';
select partition_id, fragment_id, partition_order, log_part_id, preferred_primary from table_fragments as tf join dict_obj_info as doi where tf.table_id = doi.id and doi.fq_name = 'test/def/t1' order by fragment_id;
select fragment_id, replica_node_id from table_replicas as tr join dict_obj_info as doi where tr.table_id = doi.id and doi.fq_name = 'test/def/t1' order by fragment_id, replica_node_id;
select read_backup, fully_replicated from table_info as ti join dict_obj_info as doi where ti.table_id = doi.id and doi.fq_name = 'test/def/t1';
use test;
let $count = 24;
while ($count)
{
eval insert into t1 values ('$count', REPEAT('1', 3000), $count, REPEAT('$count', 3000), REPEAT('A', 26000));
dec $count;
}
# Save element count for each partition by using first nodes fragments.
create temporary table t1_frag_size (
fragment_num int primary key,
fixed_elem_count int
);
insert into t1_frag_size select fragment_num, fixed_elem_count from `ndbinfo`.`memory_per_fragment`
where fq_name = 'test/def/t1' and node_id = 1;
set @numpart = (select count(*) from t1_frag_size);
# Verify that all fragments for a partition have same element count.
# Any mismatch will be printed.
select mpf.node_id, mpf.fragment_num, mpf.fixed_elem_count, tfs.fragment_num, tfs.fixed_elem_count
from `ndbinfo`.`memory_per_fragment` mpf
join t1_frag_size tfs
on tfs.fragment_num = mpf.fragment_num mod @numpart
where mpf.fq_name = 'test/def/t1'
and mpf.fixed_elem_count <> tfs.fixed_elem_count
order by tfs.fragment_num, mpf.node_id, mpf.fragment_num;
create temporary table counters_at_startup
select counter_name, sum(val) as val
from ndbinfo.counters
group by counter_name;
select a,b,LENGTH(c) from t1 where a = '1' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '2' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '3' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '4' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '5' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '6' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '7' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '8' and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('1', '2', '3', '4', '5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('2', '3', '4', '5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('3', '4', '5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('4', '5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('7', '8') and e = REPEAT('1', 3000);
select s1.counter_name, s2.val - s1.val as diff
from counters_at_startup s1,
(select counter_name, sum(val) as val
from ndbinfo.counters
group by counter_name) s2
where s1.counter_name = s2.counter_name
and ( s1.counter_name = 'LOCAL_READS' or s1.counter_name = 'READS' )
order by 1;
drop table counters_at_startup;
# Due to yet unfiled bug:
# PartitionBalance is wrong for unique index and blob table.
# Remove this comment and re-record when indexes and blob table have:
# PartitionBalance: FOR_RP_BY_LDM
# Table options: readbackup, fullyreplicated
# --let ndb_desc_opts= -b -i -d test t1
# --source suite/ndb/include/ndb_desc_print.inc
#
# Explictly check table options include fully_replicated
# Remove this explicit test than complete ndb_desc above is correct.
let $ndb_exec_command= $NDB_DESC -b -d test t1;
let $ndb_exec_select= output_line like 'Table options:%'
or output_line like '-- % --';
let $ndb_exec_replace= /([ _])[0-9][0-9]*/\1#/;
source suite/ndb/include/ndb_exec.inc;
## Create nodegroup for "new" nodes 3,4
--echo Creating nodegroup
--exec $NDB_MGM -e "create nodegroup 3,4" > /dev/null
alter table t1 algorithm=inplace, reorganize partition;
use ndbinfo;
select tab_partitions, tab_fragments from table_distribution_status as tds join dict_obj_info as doi where tds.table_id = doi.id and doi.fq_name = 'test/def/t1';
select partition_id, fragment_id, log_part_id, partition_order, preferred_primary from table_fragments as tf join dict_obj_info as doi where tf.table_id = doi.id and doi.fq_name = 'test/def/t1' order by fragment_id;
select fragment_id, replica_node_id from table_replicas as tr join dict_obj_info as doi where tr.table_id = doi.id and doi.fq_name = 'test/def/t1' order by fragment_id, replica_node_id;
use test;
set global ndb_data_node_neighbour = 1;
create table c as select node_id, fragment_num, tot_frag_scans
from `ndbinfo`.`operations_per_fragment`
where fq_name = 'test/def/t1';
select count(*) from t1;
select distinct o.node_id
from `ndbinfo`.`operations_per_fragment` o join c
on o.node_id = c.node_id and o.fragment_num = c.fragment_num
where fq_name = 'test/def/t1' and o.tot_frag_scans > c.tot_frag_scans;
drop table c;
set global ndb_data_node_neighbour = 2;
create table c as select node_id, fragment_num, tot_frag_scans
from `ndbinfo`.`operations_per_fragment`
where fq_name = 'test/def/t1';
select count(*) from t1;
select distinct o.node_id
from `ndbinfo`.`operations_per_fragment` o join c
on o.node_id = c.node_id and o.fragment_num = c.fragment_num
where fq_name = 'test/def/t1' and o.tot_frag_scans > c.tot_frag_scans;
drop table c;
set global ndb_data_node_neighbour = 3;
create table c as select node_id, fragment_num, tot_frag_scans
from `ndbinfo`.`operations_per_fragment`
where fq_name = 'test/def/t1';
--sorted_result
select a,b,LENGTH(c) from t1 where a = 1;
select distinct o.node_id
from `ndbinfo`.`operations_per_fragment` o join c
on o.node_id = c.node_id and o.fragment_num = c.fragment_num
where fq_name = 'test/def/t1' and o.tot_frag_scans > c.tot_frag_scans;
drop table c;
set global ndb_data_node_neighbour = 4;
create table c as select node_id, fragment_num, tot_frag_scans
from `ndbinfo`.`operations_per_fragment`
where fq_name = 'test/def/t1';
--sorted_result
select a,b,LENGTH(c) from t1;
select distinct o.node_id
from `ndbinfo`.`operations_per_fragment` o join c
on o.node_id = c.node_id and o.fragment_num = c.fragment_num
where fq_name = 'test/def/t1' and o.tot_frag_scans > c.tot_frag_scans;
drop table c;
set global ndb_data_node_neighbour = 0;
# Verify that all fragments for a partition have same element count.
# Any mismatch will be printed.
select mpf.node_id, mpf.fragment_num, mpf.fixed_elem_count, tfs.fragment_num, tfs.fixed_elem_count
from `ndbinfo`.`memory_per_fragment` mpf
join t1_frag_size tfs
on tfs.fragment_num = mpf.fragment_num mod @numpart
where mpf.fq_name = 'test/def/t1'
and mpf.fixed_elem_count <> tfs.fixed_elem_count
order by tfs.fragment_num, mpf.node_id, mpf.fragment_num;
create temporary table counters_at_startup
select counter_name, sum(val) as val
from ndbinfo.counters
group by counter_name;
select a,b,LENGTH(c) from t1 where a = '1' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '2' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '3' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '4' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '5' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '6' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '7' and e = REPEAT('1', 3000);
select a,b,LENGTH(c) from t1 where a = '8' and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('1', '2', '3', '4', '5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('2', '3', '4', '5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('3', '4', '5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('4', '5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('5', '6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('6', '7', '8') and e = REPEAT('1', 3000);
--sorted_result
select a,b,LENGTH(c) from t1 where a in ('7', '8') and e = REPEAT('1', 3000);
select s1.counter_name, s2.val - s1.val as diff
from counters_at_startup s1,
(select counter_name, sum(val) as val
from ndbinfo.counters
group by counter_name) s2
where s1.counter_name = s2.counter_name
and ( s1.counter_name = 'LOCAL_READS' or s1.counter_name = 'READS' )
order by 1;
drop table counters_at_startup;
# Verify that all fragments for a partition have same element count.
# Any mismatch will be printed.
select mpf.node_id, mpf.fragment_num, mpf.fixed_elem_count, tfs.fragment_num, tfs.fixed_elem_count
from `ndbinfo`.`memory_per_fragment` mpf
join t1_frag_size tfs
on tfs.fragment_num = mpf.fragment_num mod @numpart
where mpf.fq_name = 'test/def/t1'
and mpf.fixed_elem_count <> tfs.fixed_elem_count
order by tfs.fragment_num, mpf.node_id, mpf.fragment_num;
# Due to Bug#13714258 UNIQUE INDEXES NOT REORGANISED BY ONLINE TABLE REORG
# FragmentCount and HashMap are wrong for t1/b$unique.
# Remove this comment and re-record when t1/b$unique have:
# FragmentCount: 8
# HashMap: DEFAULT-HASHMAP-3840-8
# Table options: readbackup, fullyreplicated
# --let ndb_desc_opts= -b -i -d test t1
# --source suite/ndb/include/ndb_desc_print.inc
#
# Explictly check table options include fully_replicated
# Remove this explicit test than complete ndb_desc above is correct.
let $ndb_exec_command= $NDB_DESC -b -d test t1;
let $ndb_exec_select= output_line like 'Table options:%'
or output_line like '-- % --';
let $ndb_exec_replace= /([ _])[0-9][0-9]*/\1#/;
source suite/ndb/include/ndb_exec.inc;
## Create nodegroup for "new" nodes 5,6
--echo Creating nodegroup
--exec $NDB_MGM -e "create nodegroup 5,6" > /dev/null
## Create nodegroup for "new" nodes 7,8
--echo Creating nodegroup
--exec $NDB_MGM -e "create nodegroup 7,8" > /dev/null
alter table t1 algorithm=inplace, reorganize partition;
use ndbinfo;
select tab_partitions, tab_fragments from table_distribution_status as tds join dict_obj_info as doi where tds.table_id = doi.id and doi.fq_name = 'test/def/t1';
select partition_id, fragment_id, partition_order, log_part_id, preferred_primary from table_fragments as tf join dict_obj_info as doi where tf.table_id = doi.id and doi.fq_name = 'test/def/t1' order by fragment_id;
select fragment_id, replica_node_id from table_replicas as tr join dict_obj_info as doi where tr.table_id = doi.id and doi.fq_name = 'test/def/t1' order by fragment_id, replica_node_id;
use test;
# Verify that all fragments for a partition have same element count.
# Any mismatch will be printed.
select mpf.node_id, mpf.fragment_num, mpf.fixed_elem_count, tfs.fragment_num, tfs.fixed_elem_count
from `ndbinfo`.`memory_per_fragment` mpf
join t1_frag_size tfs
on tfs.fragment_num = mpf.fragment_num mod @numpart
where mpf.fq_name = 'test/def/t1'
and mpf.fixed_elem_count <> tfs.fixed_elem_count
order by tfs.fragment_num, mpf.node_id, mpf.fragment_num;
drop table t1;