Skip to content

Commit 5036941

Browse files
committed
Backport fix for Bug #30928710 NDB : NDB_RESTORE AUTO_INC SIGNED VALUES BELOW ZERO
Modify ndb_restore behaviour when restoring signed auto-increment columns, so that it does not incorrectly consider negative values when determining the maximum value included in the data. Extend testing in ndb_restore_autoinc and ndb_restore_autoinc_debug testcases to cover these scenarios. Approved by : Priyanka Sangam <priyanka.sangam@oracle.com>
1 parent 658a5ee commit 5036941

File tree

5 files changed

+376
-20
lines changed

5 files changed

+376
-20
lines changed

mysql-test/suite/ndb/r/ndb_restore_autoinc.result

Lines changed: 159 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,70 @@ Expect next == 6
5151
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name="big_varchars";
5252
table_schema table_name auto_increment
5353
test big_varchars 6
54+
create table tinysignedauto (
55+
a tinyint auto_increment primary key,
56+
b varchar(2000)
57+
) engine=ndb;
58+
create table smallsignedauto (
59+
a smallint auto_increment primary key,
60+
b varchar(2000)
61+
) engine=ndb;
62+
create table medsignedauto (
63+
a mediumint auto_increment primary key,
64+
b varchar(2000)
65+
) engine=ndb;
66+
create table intsignedauto (
67+
a int auto_increment primary key,
68+
b varchar(2000)
69+
) engine=ndb;
70+
create table bigsignedauto (
71+
a bigint auto_increment primary key,
72+
b varchar(2000)
73+
) engine=ndb;
74+
insert into tinysignedauto(b) values (repeat('ILBJC', 40));
75+
insert into tinysignedauto(b) values (repeat('ILBJC', 40));
76+
insert into tinysignedauto(b) values (repeat('ILBJC', 40));
77+
insert into smallsignedauto(b) values (repeat('ILBJC', 40));
78+
insert into smallsignedauto(b) values (repeat('ILBJC', 40));
79+
insert into smallsignedauto(b) values (repeat('ILBJC', 40));
80+
insert into medsignedauto(b) values (repeat('ILBJC', 40));
81+
insert into medsignedauto(b) values (repeat('ILBJC', 40));
82+
insert into medsignedauto(b) values (repeat('ILBJC', 40));
83+
insert into intsignedauto(b) values (repeat('ILBJC', 40));
84+
insert into intsignedauto(b) values (repeat('ILBJC', 40));
85+
insert into intsignedauto(b) values (repeat('ILBJC', 40));
86+
insert into bigsignedauto(b) values (repeat('ILBJC', 40));
87+
insert into bigsignedauto(b) values (repeat('ILBJC', 40));
88+
insert into bigsignedauto(b) values (repeat('ILBJC', 40));
89+
Expect next == 4
90+
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name like "%signedauto" order by table_name;
91+
table_schema table_name auto_increment
92+
test bigsignedauto 4
93+
test intsignedauto 4
94+
test medsignedauto 4
95+
test smallsignedauto 4
96+
test tinysignedauto 4
97+
insert into tinysignedauto values (-100, repeat('IWBJC', 40));
98+
insert into smallsignedauto values (-100, repeat('IWBJC', 40));
99+
insert into medsignedauto values (-100, repeat('IWBJC', 40));
100+
insert into intsignedauto values (-100, repeat('IWBJC', 40));
101+
insert into bigsignedauto values (-100, repeat('IWBJC', 40));
102+
Expect next == 4
103+
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name like "%signedauto" order by table_name;
104+
table_schema table_name auto_increment
105+
test bigsignedauto 4
106+
test intsignedauto 4
107+
test medsignedauto 4
108+
test smallsignedauto 4
109+
test tinysignedauto 4
54110
----------------------------------------
55111
2. Take a backup
56112
----------------------------------------
113+
drop table bigsignedauto;
114+
drop table intsignedauto;
115+
drop table medsignedauto;
116+
drop table smallsignedauto;
117+
drop table tinysignedauto;
57118
drop table big_varchars;
58119
drop table empty_specific;
59120
drop table empty_default;
@@ -100,6 +161,27 @@ Expect next == 73
100161
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name="empty_specific";
101162
table_schema table_name auto_increment
102163
test empty_specific 73
164+
Following unchanged
165+
create table tinysignedauto (
166+
a tinyint auto_increment primary key,
167+
b varchar(2000)
168+
) engine=ndb;
169+
create table smallsignedauto (
170+
a smallint auto_increment primary key,
171+
b varchar(2000)
172+
) engine=ndb;
173+
create table medsignedauto (
174+
a mediumint auto_increment primary key,
175+
b varchar(2000)
176+
) engine=ndb;
177+
create table intsignedauto (
178+
a int auto_increment primary key,
179+
b varchar(2000)
180+
) engine=ndb;
181+
create table bigsignedauto (
182+
a bigint auto_increment primary key,
183+
b varchar(2000)
184+
) engine=ndb;
103185
----------------------------------------
104186
4. Restore data
105187
----------------------------------------
@@ -122,6 +204,14 @@ Expect 6
122204
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name="big_varchars";
123205
table_schema table_name auto_increment
124206
test big_varchars 6
207+
Expect next == 4
208+
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name like "%signedauto" order by table_name;
209+
table_schema table_name auto_increment
210+
test bigsignedauto 4
211+
test intsignedauto 4
212+
test medsignedauto 4
213+
test smallsignedauto 4
214+
test tinysignedauto 4
125215
----------------------------------------
126216
6. Test via inserts
127217
----------------------------------------
@@ -153,6 +243,27 @@ Expect 6
153243
select max(a) from big_varchars;
154244
max(a)
155245
6
246+
insert into tinysignedauto (b) values (repeat('IMBJC', 40));
247+
insert into smallsignedauto (b) values (repeat('IMBJC', 40));
248+
insert into medsignedauto (b) values (repeat('IMBJC', 40));
249+
insert into intsignedauto (b) values (repeat('IMBJC', 40));
250+
insert into bigsignedauto (b) values (repeat('IMBJC', 40));
251+
Expect 4
252+
select max(a) from tinysignedauto;
253+
max(a)
254+
4
255+
select max(a) from smallsignedauto;
256+
max(a)
257+
4
258+
select max(a) from medsignedauto;
259+
max(a)
260+
4
261+
select max(a) from intsignedauto;
262+
max(a)
263+
4
264+
select max(a) from bigsignedauto;
265+
max(a)
266+
4
156267
----------------------------------------
157268
7. Cleanup
158269
----------------------------------------
@@ -161,6 +272,11 @@ drop table boring_keyless;
161272
drop table empty_default;
162273
drop table empty_specific;
163274
drop table big_varchars;
275+
drop table bigsignedauto;
276+
drop table intsignedauto;
277+
drop table medsignedauto;
278+
drop table smallsignedauto;
279+
drop table tinysignedauto;
164280
drop table filler1, filler2, filler3, filler4;
165281
drop table filler5, filler6, filler7, filler8;
166282
----------------------------------------
@@ -182,6 +298,13 @@ test empty_specific 1
182298
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name="big_varchars";
183299
table_schema table_name auto_increment
184300
test big_varchars 1
301+
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name like "%signedauto" order by table_name;
302+
table_schema table_name auto_increment
303+
test bigsignedauto 1
304+
test intsignedauto 1
305+
test medsignedauto 1
306+
test smallsignedauto 1
307+
test tinysignedauto 1
185308
----------------------------------------
186309
10. Restore data
187310
----------------------------------------
@@ -204,8 +327,16 @@ Expect 6
204327
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name="big_varchars";
205328
table_schema table_name auto_increment
206329
test big_varchars 6
330+
Expect 4
331+
select table_schema, table_name, auto_increment from information_schema.tables where table_schema="test" and table_name like "%signedauto" order by table_name;
332+
table_schema table_name auto_increment
333+
test bigsignedauto 4
334+
test intsignedauto 4
335+
test medsignedauto 4
336+
test smallsignedauto 4
337+
test tinysignedauto 4
207338
----------------------------------------
208-
6. Test via inserts
339+
12. Test via inserts
209340
----------------------------------------
210341
insert into boring (b) values (99);
211342
Expect 7
@@ -235,11 +366,37 @@ Expect 6
235366
select max(a) from big_varchars;
236367
max(a)
237368
6
369+
insert into tinysignedauto (b) values (repeat('IMBJC', 40));
370+
insert into smallsignedauto (b) values (repeat('IMBJC', 40));
371+
insert into medsignedauto (b) values (repeat('IMBJC', 40));
372+
insert into intsignedauto (b) values (repeat('IMBJC', 40));
373+
insert into bigsignedauto (b) values (repeat('IMBJC', 40));
374+
Expect 4
375+
select max(a) from tinysignedauto;
376+
max(a)
377+
4
378+
select max(a) from smallsignedauto;
379+
max(a)
380+
4
381+
select max(a) from medsignedauto;
382+
max(a)
383+
4
384+
select max(a) from intsignedauto;
385+
max(a)
386+
4
387+
select max(a) from bigsignedauto;
388+
max(a)
389+
4
238390
----------------------------------------
239-
7. Cleanup
391+
13. Cleanup
240392
----------------------------------------
241393
drop table boring;
242394
drop table boring_keyless;
243395
drop table empty_default;
244396
drop table empty_specific;
245397
drop table big_varchars;
398+
drop table bigsignedauto;
399+
drop table intsignedauto;
400+
drop table medsignedauto;
401+
drop table smallsignedauto;
402+
drop table tinysignedauto;

mysql-test/suite/ndb/r/ndb_restore_autoinc_debug.result

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
11
Check some behaviours around restoring autoinc
22
tables where autoinc values are used in the log
33
use test;
4+
create table signed (a int auto_increment primary key, b int) engine=ndb;
45
create table test.t1 (a int auto_increment primary key, b int) engine=ndb;
56
create table test.t2 (a int auto_increment primary key, b int) engine=ndb;
7+
insert into signed (b) values (1), (2), (3);
8+
insert into signed (a,b) values (-20, -20);
69
insert into test.t1 (b) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
710
insert into test.t2 (b) values (1), (2);
811
Cause backup stall
912
Starting backup
1013
Backup started
14+
insert into signed (b) values (4), (5), (6), (7);
15+
insert into signed (a,b) values (-30, -30);
1116
insert into test.t1 (b) values (11), (12), (13), (14), (15), (16), (17), (18), (19), (20);
1217
insert into test.t2 (b) values (3), (4);
18+
select auto_increment from information_schema.tables where table_schema='test' and table_name='signed';
19+
auto_increment
20+
8
1321
select auto_increment from information_schema.tables where table_schema='test' and table_name='t1';
1422
auto_increment
1523
21
@@ -18,35 +26,46 @@ auto_increment
1826
5
1927
Waiting for backup to complete
2028
Backup completed
29+
drop table signed;
2130
drop table test.t1;
2231
drop table test.t2;
32+
create table signed (a int auto_increment primary key, b int) engine=ndb;
2333
Recreate tables in opposite order so they swap table ids
2434
create table test.t2 (a int auto_increment primary key, b int) engine=ndb;
2535
create table test.t1 (a int auto_increment primary key, b int) engine=ndb;
2636
Restore data in order 1,2
2737
Node 1
2838
Node 2
2939
Check restored auto-inc metadata :
40+
select auto_increment from information_schema.tables where table_schema='test' and table_name='signed';
41+
auto_increment
42+
8
3043
select auto_increment from information_schema.tables where table_schema='test' and table_name='t1';
3144
auto_increment
3245
21
3346
select auto_increment from information_schema.tables where table_schema='test' and table_name='t2';
3447
auto_increment
3548
5
49+
drop table signed;
3650
drop table test.t1;
3751
drop table test.t2;
52+
create table signed (a int auto_increment primary key, b int) engine=ndb;
3853
Recreate tables in opposite order so they swap table ids
3954
create table test.t2 (a int auto_increment primary key, b int) engine=ndb;
4055
create table test.t1 (a int auto_increment primary key, b int) engine=ndb;
4156
Restore data in order 2,1
4257
Node 2
4358
Node 1
4459
Check restored auto-inc metadata :
60+
select auto_increment from information_schema.tables where table_schema='test' and table_name='signed';
61+
auto_increment
62+
8
4563
select auto_increment from information_schema.tables where table_schema='test' and table_name='t1';
4664
auto_increment
4765
21
4866
select auto_increment from information_schema.tables where table_schema='test' and table_name='t2';
4967
auto_increment
5068
5
69+
drop table signed;
5170
drop table test.t1;
5271
drop table test.t2;

0 commit comments

Comments
 (0)