Skip to content

Commit 8f771b2

Browse files
committed
MDEV-34914 maria.bulk_insert_crash fails on s390x (10.6+, Debug)
This was caused by a wrong handling of bitmaps in copy_not_changed_fields() that did not work on big endian machines. This bug caused recovery of Aria files to fail on big endian machines like s390x or Sparc. This issue was noticed by the bulk_insert_crash.test on the s390x builder.
1 parent d00e0f7 commit 8f771b2

File tree

4 files changed

+9
-9
lines changed

4 files changed

+9
-9
lines changed

mysql-test/suite/maria/bulk_insert_crash.result

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
create table t1 (a int primary key, b int, c int, unique key(b), key(c)) engine=aria transactional=1;
22
insert into t1 values (1000,1000,1000);
33
insert into t1 select seq,seq+100, seq+200 from seq_1_to_10;
4+
select sum(a),sum(b),sum(c) from t1;
5+
sum(a) sum(b) sum(c)
6+
1055 2055 3055
47
SET GLOBAL debug_dbug="+d,crash_end_bulk_insert";
58
REPLACE into t1 select seq+20,seq+95, seq + 300 from seq_1_to_10;
69
ERROR HY000: Lost connection to server during query

mysql-test/suite/maria/bulk_insert_crash.test

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ create table t1 (a int primary key, b int, c int, unique key(b), key(c)) engine=
1818
insert into t1 values (1000,1000,1000);
1919
insert into t1 select seq,seq+100, seq+200 from seq_1_to_10;
2020

21+
select sum(a),sum(b),sum(c) from t1;
22+
2123
# Insert into t1 with batch insert where we get a rows replaced after
2224
# a few sucessful inserts
2325

storage/maria/aria_read_log.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ int main(int argc, char **argv)
199199
/* don't touch anything more, in case we hit a bug */
200200
fprintf(stderr, "%s: FAILED\n", my_progname_short);
201201
free_tmpdir(&maria_chk_tmpdir);
202+
my_hash_free(&tables_to_redo);
202203
free_defaults(default_argv);
203204
exit(1);
204205
}

storage/maria/ma_blockrec.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -953,14 +953,13 @@ void copy_not_changed_fields(MARIA_HA *info, MY_BITMAP *changed_fields,
953953
uchar *to, uchar *from)
954954
{
955955
MARIA_COLUMNDEF *column, *end_column;
956-
uchar *bitmap= (uchar*) changed_fields->bitmap;
957956
MARIA_SHARE *share= info->s;
958-
uint bit= 1;
957+
uint bit= 0;
959958

960959
for (column= share->columndef, end_column= column+ share->base.fields;
961-
column < end_column; column++)
960+
column < end_column; column++, bit++)
962961
{
963-
if (!(*bitmap & bit))
962+
if (!bitmap_is_set(changed_fields, bit))
964963
{
965964
uint field_length= column->length;
966965
if (column->type == FIELD_VARCHAR)
@@ -972,11 +971,6 @@ void copy_not_changed_fields(MARIA_HA *info, MY_BITMAP *changed_fields,
972971
}
973972
memcpy(to + column->offset, from + column->offset, field_length);
974973
}
975-
if ((bit= (bit << 1)) == 256)
976-
{
977-
bitmap++;
978-
bit= 1;
979-
}
980974
}
981975
}
982976

0 commit comments

Comments
 (0)