Loading mysql-test/r/rpl_ndb_blob.result 0 → 100644 +126 −0 Original line number Diff line number Diff line stop slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; create table t1 ( a int not null primary key, b text not null ) engine=ndb; insert into t1 values(1, repeat('abc',10)); insert into t1 values(2, repeat('def',200)); insert into t1 values(3, repeat('ghi',3000)); select 'M', a, sha1(b) from t1 order by a; M a sha1(b) M 1 8a6c4cf7cf97e66c487c3e3b717e9ae13623d07d M 2 0ccd08c0fa6ad6a4382b27b1d36586d6ceb4fffa M 3 75e7b3299e0b776aeac2a4d1542d5b3c0ba2e05e select 'S', a, sha1(b) from t1 order by a; S a sha1(b) S 1 8a6c4cf7cf97e66c487c3e3b717e9ae13623d07d S 2 0ccd08c0fa6ad6a4382b27b1d36586d6ceb4fffa S 3 75e7b3299e0b776aeac2a4d1542d5b3c0ba2e05e drop table t1; create table t1 ( a int not null primary key, b text not null, c int, d longblob, e tinyblob ) engine=ndbcluster; insert into t1 values ( 0, repeat(@s2,454), 100, repeat(@s2,345), NULL); insert into t1 values ( 1, repeat(@s0,504), NULL, repeat(@s1,732), repeat(@s1,1)); insert into t1 values ( 2, '', 102, '', repeat(@s2,1)); insert into t1 values ( 3, repeat(@s0,545), 103, repeat(@s2,788), repeat(@s0,1)); insert into t1 values ( 4, repeat(@s1,38), 104, repeat(@s0,260), repeat(@s0,1)); insert into t1 values ( 5, repeat(@s2,12), 105, repeat(@s2,40), repeat(@s1,1)); insert into t1 values ( 6, repeat(@s1,242), 106, NULL, repeat(@s1,1)); insert into t1 values ( 7, repeat(@s1,30), 107, repeat(@s0,161), ''); insert into t1 values ( 8, repeat(@s1,719), 108, repeat(@s2,104), NULL); insert into t1 values ( 9, repeat(@s2,427), NULL, NULL, NULL); select 'M', a, sha1(b), c, sha1(d), sha1(e) from t1 order by a; M a sha1(b) c sha1(d) sha1(e) M 0 9538f61e649383c0d1054de2a2f0171188129f33 100 2b6515f29c20b8e9e17cc597527e516c0de8d612 NULL M 1 dcb9a12ca86e718ff2564be041b7c1b3ff5ea559 NULL f23e7439d9a73c3954979b85a7ef6ef35faf4e9d abfe8ae5212b22d023aa6de84beeb1344ac5668a M 2 da39a3ee5e6b4b0d3255bfef95601890afd80709 102 da39a3ee5e6b4b0d3255bfef95601890afd80709 33deebe47470a40e960834bffa4cdc66790845a6 M 3 ec8e06d9ac4695d6a898b519ba840590263a9bff 103 278629ad080c3c4377978c006c2e54d0992e43cc 700915801f853603510aeb67b331866d996fdbda M 4 0392fa8c425d293c79291f0f34779d1101d13fcb 104 5084b602c7203e0e9590a163415ac605da17ac32 700915801f853603510aeb67b331866d996fdbda M 5 0f9653f0c7a69cd1c617792d546582e974a7a24d 105 566588a04ff26d05160d61c83435292bfda2978e abfe8ae5212b22d023aa6de84beeb1344ac5668a M 6 a37e8b0ff4fc13a42be02cdecb36186436959bae 106 NULL abfe8ae5212b22d023aa6de84beeb1344ac5668a M 7 a6bae0cfe6b45ff8c3c12d2ce577a1cd3931190f 107 39ee712b4b9e47f2cf3ba7c9790b2bf0d8f378e8 da39a3ee5e6b4b0d3255bfef95601890afd80709 M 8 e139adcb7b2974ee7ff227fd405709e5cb7c896c 108 ba8073b0e1a281d4111bd2d82c7722b01574c00b NULL M 9 1fc5168fe4be566b17b658d94e7813f0b5032cdb NULL NULL NULL select 'S', a, sha1(b), c, sha1(d), sha1(e) from t1 order by a; S a sha1(b) c sha1(d) sha1(e) S 0 9538f61e649383c0d1054de2a2f0171188129f33 100 2b6515f29c20b8e9e17cc597527e516c0de8d612 NULL S 1 dcb9a12ca86e718ff2564be041b7c1b3ff5ea559 NULL f23e7439d9a73c3954979b85a7ef6ef35faf4e9d abfe8ae5212b22d023aa6de84beeb1344ac5668a S 2 da39a3ee5e6b4b0d3255bfef95601890afd80709 102 da39a3ee5e6b4b0d3255bfef95601890afd80709 33deebe47470a40e960834bffa4cdc66790845a6 S 3 ec8e06d9ac4695d6a898b519ba840590263a9bff 103 278629ad080c3c4377978c006c2e54d0992e43cc 700915801f853603510aeb67b331866d996fdbda S 4 0392fa8c425d293c79291f0f34779d1101d13fcb 104 5084b602c7203e0e9590a163415ac605da17ac32 700915801f853603510aeb67b331866d996fdbda S 5 0f9653f0c7a69cd1c617792d546582e974a7a24d 105 566588a04ff26d05160d61c83435292bfda2978e abfe8ae5212b22d023aa6de84beeb1344ac5668a S 6 a37e8b0ff4fc13a42be02cdecb36186436959bae 106 NULL abfe8ae5212b22d023aa6de84beeb1344ac5668a S 7 a6bae0cfe6b45ff8c3c12d2ce577a1cd3931190f 107 39ee712b4b9e47f2cf3ba7c9790b2bf0d8f378e8 da39a3ee5e6b4b0d3255bfef95601890afd80709 S 8 e139adcb7b2974ee7ff227fd405709e5cb7c896c 108 ba8073b0e1a281d4111bd2d82c7722b01574c00b NULL S 9 1fc5168fe4be566b17b658d94e7813f0b5032cdb NULL NULL NULL drop table t1; show binlog events; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 102 Server ver: VERSION, Binlog ver: 4 master-bin.000001 102 Query 1 239 use `test`; create table t1 ( a int not null primary key, b text not null ) engine=ndb master-bin.000001 239 Query 1 303 BEGIN master-bin.000001 303 Table_map 1 65 cluster_replication.apply_status master-bin.000001 368 Write_rows 1 107 master-bin.000001 410 Table_map 1 147 test.t1 master-bin.000001 450 Write_rows 1 818 master-bin.000001 1121 Write_rows 1 9853 master-bin.000001 10156 Query 1 10221 COMMIT master-bin.000001 10221 Query 1 10285 BEGIN master-bin.000001 10285 Table_map 1 65 cluster_replication.apply_status master-bin.000001 10350 Write_rows 1 107 master-bin.000001 10392 Query 1 10457 COMMIT master-bin.000001 10457 Query 1 10533 use `test`; drop table t1 master-bin.000001 10533 Query 1 10708 use `test`; create table t1 ( a int not null primary key, b text not null, c int, d longblob, e tinyblob ) engine=ndbcluster master-bin.000001 10708 Query 1 10772 BEGIN master-bin.000001 10772 Table_map 1 65 cluster_replication.apply_status master-bin.000001 10837 Write_rows 1 107 master-bin.000001 10879 Table_map 1 150 test.t1 master-bin.000001 10922 Write_rows 1 48934 master-bin.000001 59706 Write_rows 1 124436 master-bin.000001 135208 Write_rows 1 124542 master-bin.000001 135314 Write_rows 1 205961 master-bin.000001 216733 Write_rows 1 224245 master-bin.000001 235017 Write_rows 1 227523 master-bin.000001 238295 Write_rows 1 242391 master-bin.000001 253163 Write_rows 1 254087 master-bin.000001 264859 Write_rows 1 304335 master-bin.000001 315107 Write_rows 1 330427 master-bin.000001 341199 Query 1 341264 COMMIT master-bin.000001 341264 Query 1 341328 BEGIN master-bin.000001 341328 Table_map 1 65 cluster_replication.apply_status master-bin.000001 341393 Write_rows 1 107 master-bin.000001 341435 Query 1 341500 COMMIT master-bin.000001 341500 Query 1 341576 use `test`; drop table t1 mysql-test/t/disabled.def +0 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ rpl_sp : Bug #16456 #ndb_dd_disk2memory : Bug #16466 ndb_autodiscover : Needs to be fixed w.r.t binlog ndb_autodiscover2 : Needs to be fixed w.r.t binlog ndb_blob : BLOB replication causes core in master1 (Pekka will fix) #ndb_alter_table_row : sometimes wrong error 1015!=1046 ndb_gis : garbled msgs from corrupt THD* ndb_binlog_ddl_multi : Bug #17038 Loading mysql-test/t/rpl_ndb_blob.test 0 → 100644 +93 −0 Original line number Diff line number Diff line --source include/have_ndb.inc --source include/have_binlog_format_row.inc --source include/master-slave.inc # # basic test of blob replication for NDB # # easy test --connection master create table t1 ( a int not null primary key, b text not null ) engine=ndb; insert into t1 values(1, repeat('abc',10)); insert into t1 values(2, repeat('def',200)); insert into t1 values(3, repeat('ghi',3000)); select 'M', a, sha1(b) from t1 order by a; --sync_slave_with_master --sleep 5 --connection slave select 'S', a, sha1(b) from t1 order by a; --connection master drop table t1; --sync_slave_with_master # hard test --connection master create table t1 ( a int not null primary key, b text not null, c int, d longblob, e tinyblob ) engine=ndbcluster; --disable_query_log # length 61 set @s0 = 'rggurloniukyehuxdbfkkyzlceixzrehqhvxvxbpwizzvjzpucqmzrhzxzfau'; set @s1 = 'ykyymbzqgqlcjhlhmyqelfoaaohvtbekvifukdtnvcrrjveevfakxarxexomz'; set @s2 = 'dbnfqyzgtqxalcrwtfsqabknvtfcbpoonxsjiqvmhnfikxxhcgoexlkoezvah'; --enable_query_log insert into t1 values ( 0, repeat(@s2,454), 100, repeat(@s2,345), NULL); insert into t1 values ( 1, repeat(@s0,504), NULL, repeat(@s1,732), repeat(@s1,1)); insert into t1 values ( 2, '', 102, '', repeat(@s2,1)); insert into t1 values ( 3, repeat(@s0,545), 103, repeat(@s2,788), repeat(@s0,1)); insert into t1 values ( 4, repeat(@s1,38), 104, repeat(@s0,260), repeat(@s0,1)); insert into t1 values ( 5, repeat(@s2,12), 105, repeat(@s2,40), repeat(@s1,1)); insert into t1 values ( 6, repeat(@s1,242), 106, NULL, repeat(@s1,1)); insert into t1 values ( 7, repeat(@s1,30), 107, repeat(@s0,161), ''); insert into t1 values ( 8, repeat(@s1,719), 108, repeat(@s2,104), NULL); insert into t1 values ( 9, repeat(@s2,427), NULL, NULL, NULL); select 'M', a, sha1(b), c, sha1(d), sha1(e) from t1 order by a; --sync_slave_with_master --sleep 5 --connection slave select 'S', a, sha1(b), c, sha1(d), sha1(e) from t1 order by a; --connection master drop table t1; --sync_slave_with_master # # view the binlog # --connection master let $VERSION=`select version()`; --replace_result $VERSION VERSION show binlog events; sql/ha_ndbcluster.cc +42 −42 Original line number Diff line number Diff line Loading @@ -840,51 +840,51 @@ int get_ndb_blobs_value(TABLE* table, NdbValue* value_array, { Field *field= table->field[i]; NdbValue value= value_array[i]; if (value.ptr != NULL && (field->flags & BLOB_FLAG)) if (! (field->flags & BLOB_FLAG)) continue; if (value.blob == NULL) { DBUG_PRINT("info",("[%u] skipped", i)); continue; } Field_blob *field_blob= (Field_blob *)field; NdbBlob *ndb_blob= value.blob; int isNull; ndb_blob->getDefined(isNull); if (isNull == 0) { // XXX -1 should be allowed only for events Uint64 blob_len= 0; if (ndb_blob->getLength(blob_len) != 0) DBUG_RETURN(-1); if (ndb_blob->getNull(isNull) != 0) ERR_RETURN(ndb_blob->getNdbError()); if (isNull == 0) { Uint64 len64= 0; if (ndb_blob->getLength(len64) != 0) ERR_RETURN(ndb_blob->getNdbError()); // Align to Uint64 uint32 blob_size= blob_len; if (blob_size % 8 != 0) blob_size+= 8 - blob_size % 8; uint32 size= len64; if (size % 8 != 0) size+= 8 - size % 8; if (loop == 1) { char *buf= buffer + offset; uint32 len= 0xffffffff; // Max uint32 DBUG_PRINT("info", ("read blob ptr=%p len=%u", buf, (uint) blob_len)); if (ndb_blob->readData(buf, len) != 0) DBUG_RETURN(-1); DBUG_PRINT("info", ("blob field %d offset=%u len=%u [ptrdiff=%d]", i, offset, len, (int)ptrdiff)); DBUG_ASSERT(len == blob_len); ERR_RETURN(ndb_blob->getNdbError()); DBUG_PRINT("info", ("[%u] offset=%u buf=%p len=%u [ptrdiff=%d]", i, offset, buf, len, (int)ptrdiff)); DBUG_ASSERT(len == len64); // Ugly hack assumes only ptr needs to be changed field_blob->ptr+= ptrdiff; field_blob->set_ptr(len, buf); field_blob->ptr-= ptrdiff; } offset+= blob_size; offset+= size; } else { if (loop == 1) else if (loop == 1) // undefined or null { // have to set length even in this case char *buf= buffer + offset; char *buf= buffer + offset; // or maybe NULL uint32 len= 0; field_blob->ptr+= ptrdiff; field_blob->set_ptr(len, buf); field_blob->ptr-= ptrdiff; DBUG_PRINT("info", ("blob field %d isNull=%d", i, isNull)); } } DBUG_PRINT("info", ("[%u] isNull=%d", i, isNull)); } } if (loop == 0 && offset > buffer_size) Loading sql/ha_ndbcluster_binlog.cc +14 −0 Original line number Diff line number Diff line Loading @@ -2084,6 +2084,20 @@ ndbcluster_create_event_ops(NDB_SHARE *share, const NDBTAB *ndbtab, DBUG_PRINT("info", ("%s blob", col_name)); attr0.blob= op->getBlobHandle(col_name); attr1.blob= op->getPreBlobHandle(col_name); if (attr0.blob == NULL || attr1.blob == NULL) { sql_print_error("NDB Binlog: Creating NdbEventOperation" " blob field %u handles failed (code=%d) for %s", j, op->getNdbError().code, event_name); push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR, ER_GET_ERRMSG, ER(ER_GET_ERRMSG), op->getNdbError().code, op->getNdbError().message, "NDB"); ndb->dropEventOperation(op); pthread_mutex_unlock(&injector_mutex); DBUG_RETURN(-1); } } } else Loading Loading
mysql-test/r/rpl_ndb_blob.result 0 → 100644 +126 −0 Original line number Diff line number Diff line stop slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; create table t1 ( a int not null primary key, b text not null ) engine=ndb; insert into t1 values(1, repeat('abc',10)); insert into t1 values(2, repeat('def',200)); insert into t1 values(3, repeat('ghi',3000)); select 'M', a, sha1(b) from t1 order by a; M a sha1(b) M 1 8a6c4cf7cf97e66c487c3e3b717e9ae13623d07d M 2 0ccd08c0fa6ad6a4382b27b1d36586d6ceb4fffa M 3 75e7b3299e0b776aeac2a4d1542d5b3c0ba2e05e select 'S', a, sha1(b) from t1 order by a; S a sha1(b) S 1 8a6c4cf7cf97e66c487c3e3b717e9ae13623d07d S 2 0ccd08c0fa6ad6a4382b27b1d36586d6ceb4fffa S 3 75e7b3299e0b776aeac2a4d1542d5b3c0ba2e05e drop table t1; create table t1 ( a int not null primary key, b text not null, c int, d longblob, e tinyblob ) engine=ndbcluster; insert into t1 values ( 0, repeat(@s2,454), 100, repeat(@s2,345), NULL); insert into t1 values ( 1, repeat(@s0,504), NULL, repeat(@s1,732), repeat(@s1,1)); insert into t1 values ( 2, '', 102, '', repeat(@s2,1)); insert into t1 values ( 3, repeat(@s0,545), 103, repeat(@s2,788), repeat(@s0,1)); insert into t1 values ( 4, repeat(@s1,38), 104, repeat(@s0,260), repeat(@s0,1)); insert into t1 values ( 5, repeat(@s2,12), 105, repeat(@s2,40), repeat(@s1,1)); insert into t1 values ( 6, repeat(@s1,242), 106, NULL, repeat(@s1,1)); insert into t1 values ( 7, repeat(@s1,30), 107, repeat(@s0,161), ''); insert into t1 values ( 8, repeat(@s1,719), 108, repeat(@s2,104), NULL); insert into t1 values ( 9, repeat(@s2,427), NULL, NULL, NULL); select 'M', a, sha1(b), c, sha1(d), sha1(e) from t1 order by a; M a sha1(b) c sha1(d) sha1(e) M 0 9538f61e649383c0d1054de2a2f0171188129f33 100 2b6515f29c20b8e9e17cc597527e516c0de8d612 NULL M 1 dcb9a12ca86e718ff2564be041b7c1b3ff5ea559 NULL f23e7439d9a73c3954979b85a7ef6ef35faf4e9d abfe8ae5212b22d023aa6de84beeb1344ac5668a M 2 da39a3ee5e6b4b0d3255bfef95601890afd80709 102 da39a3ee5e6b4b0d3255bfef95601890afd80709 33deebe47470a40e960834bffa4cdc66790845a6 M 3 ec8e06d9ac4695d6a898b519ba840590263a9bff 103 278629ad080c3c4377978c006c2e54d0992e43cc 700915801f853603510aeb67b331866d996fdbda M 4 0392fa8c425d293c79291f0f34779d1101d13fcb 104 5084b602c7203e0e9590a163415ac605da17ac32 700915801f853603510aeb67b331866d996fdbda M 5 0f9653f0c7a69cd1c617792d546582e974a7a24d 105 566588a04ff26d05160d61c83435292bfda2978e abfe8ae5212b22d023aa6de84beeb1344ac5668a M 6 a37e8b0ff4fc13a42be02cdecb36186436959bae 106 NULL abfe8ae5212b22d023aa6de84beeb1344ac5668a M 7 a6bae0cfe6b45ff8c3c12d2ce577a1cd3931190f 107 39ee712b4b9e47f2cf3ba7c9790b2bf0d8f378e8 da39a3ee5e6b4b0d3255bfef95601890afd80709 M 8 e139adcb7b2974ee7ff227fd405709e5cb7c896c 108 ba8073b0e1a281d4111bd2d82c7722b01574c00b NULL M 9 1fc5168fe4be566b17b658d94e7813f0b5032cdb NULL NULL NULL select 'S', a, sha1(b), c, sha1(d), sha1(e) from t1 order by a; S a sha1(b) c sha1(d) sha1(e) S 0 9538f61e649383c0d1054de2a2f0171188129f33 100 2b6515f29c20b8e9e17cc597527e516c0de8d612 NULL S 1 dcb9a12ca86e718ff2564be041b7c1b3ff5ea559 NULL f23e7439d9a73c3954979b85a7ef6ef35faf4e9d abfe8ae5212b22d023aa6de84beeb1344ac5668a S 2 da39a3ee5e6b4b0d3255bfef95601890afd80709 102 da39a3ee5e6b4b0d3255bfef95601890afd80709 33deebe47470a40e960834bffa4cdc66790845a6 S 3 ec8e06d9ac4695d6a898b519ba840590263a9bff 103 278629ad080c3c4377978c006c2e54d0992e43cc 700915801f853603510aeb67b331866d996fdbda S 4 0392fa8c425d293c79291f0f34779d1101d13fcb 104 5084b602c7203e0e9590a163415ac605da17ac32 700915801f853603510aeb67b331866d996fdbda S 5 0f9653f0c7a69cd1c617792d546582e974a7a24d 105 566588a04ff26d05160d61c83435292bfda2978e abfe8ae5212b22d023aa6de84beeb1344ac5668a S 6 a37e8b0ff4fc13a42be02cdecb36186436959bae 106 NULL abfe8ae5212b22d023aa6de84beeb1344ac5668a S 7 a6bae0cfe6b45ff8c3c12d2ce577a1cd3931190f 107 39ee712b4b9e47f2cf3ba7c9790b2bf0d8f378e8 da39a3ee5e6b4b0d3255bfef95601890afd80709 S 8 e139adcb7b2974ee7ff227fd405709e5cb7c896c 108 ba8073b0e1a281d4111bd2d82c7722b01574c00b NULL S 9 1fc5168fe4be566b17b658d94e7813f0b5032cdb NULL NULL NULL drop table t1; show binlog events; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 102 Server ver: VERSION, Binlog ver: 4 master-bin.000001 102 Query 1 239 use `test`; create table t1 ( a int not null primary key, b text not null ) engine=ndb master-bin.000001 239 Query 1 303 BEGIN master-bin.000001 303 Table_map 1 65 cluster_replication.apply_status master-bin.000001 368 Write_rows 1 107 master-bin.000001 410 Table_map 1 147 test.t1 master-bin.000001 450 Write_rows 1 818 master-bin.000001 1121 Write_rows 1 9853 master-bin.000001 10156 Query 1 10221 COMMIT master-bin.000001 10221 Query 1 10285 BEGIN master-bin.000001 10285 Table_map 1 65 cluster_replication.apply_status master-bin.000001 10350 Write_rows 1 107 master-bin.000001 10392 Query 1 10457 COMMIT master-bin.000001 10457 Query 1 10533 use `test`; drop table t1 master-bin.000001 10533 Query 1 10708 use `test`; create table t1 ( a int not null primary key, b text not null, c int, d longblob, e tinyblob ) engine=ndbcluster master-bin.000001 10708 Query 1 10772 BEGIN master-bin.000001 10772 Table_map 1 65 cluster_replication.apply_status master-bin.000001 10837 Write_rows 1 107 master-bin.000001 10879 Table_map 1 150 test.t1 master-bin.000001 10922 Write_rows 1 48934 master-bin.000001 59706 Write_rows 1 124436 master-bin.000001 135208 Write_rows 1 124542 master-bin.000001 135314 Write_rows 1 205961 master-bin.000001 216733 Write_rows 1 224245 master-bin.000001 235017 Write_rows 1 227523 master-bin.000001 238295 Write_rows 1 242391 master-bin.000001 253163 Write_rows 1 254087 master-bin.000001 264859 Write_rows 1 304335 master-bin.000001 315107 Write_rows 1 330427 master-bin.000001 341199 Query 1 341264 COMMIT master-bin.000001 341264 Query 1 341328 BEGIN master-bin.000001 341328 Table_map 1 65 cluster_replication.apply_status master-bin.000001 341393 Write_rows 1 107 master-bin.000001 341435 Query 1 341500 COMMIT master-bin.000001 341500 Query 1 341576 use `test`; drop table t1
mysql-test/t/disabled.def +0 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ rpl_sp : Bug #16456 #ndb_dd_disk2memory : Bug #16466 ndb_autodiscover : Needs to be fixed w.r.t binlog ndb_autodiscover2 : Needs to be fixed w.r.t binlog ndb_blob : BLOB replication causes core in master1 (Pekka will fix) #ndb_alter_table_row : sometimes wrong error 1015!=1046 ndb_gis : garbled msgs from corrupt THD* ndb_binlog_ddl_multi : Bug #17038 Loading
mysql-test/t/rpl_ndb_blob.test 0 → 100644 +93 −0 Original line number Diff line number Diff line --source include/have_ndb.inc --source include/have_binlog_format_row.inc --source include/master-slave.inc # # basic test of blob replication for NDB # # easy test --connection master create table t1 ( a int not null primary key, b text not null ) engine=ndb; insert into t1 values(1, repeat('abc',10)); insert into t1 values(2, repeat('def',200)); insert into t1 values(3, repeat('ghi',3000)); select 'M', a, sha1(b) from t1 order by a; --sync_slave_with_master --sleep 5 --connection slave select 'S', a, sha1(b) from t1 order by a; --connection master drop table t1; --sync_slave_with_master # hard test --connection master create table t1 ( a int not null primary key, b text not null, c int, d longblob, e tinyblob ) engine=ndbcluster; --disable_query_log # length 61 set @s0 = 'rggurloniukyehuxdbfkkyzlceixzrehqhvxvxbpwizzvjzpucqmzrhzxzfau'; set @s1 = 'ykyymbzqgqlcjhlhmyqelfoaaohvtbekvifukdtnvcrrjveevfakxarxexomz'; set @s2 = 'dbnfqyzgtqxalcrwtfsqabknvtfcbpoonxsjiqvmhnfikxxhcgoexlkoezvah'; --enable_query_log insert into t1 values ( 0, repeat(@s2,454), 100, repeat(@s2,345), NULL); insert into t1 values ( 1, repeat(@s0,504), NULL, repeat(@s1,732), repeat(@s1,1)); insert into t1 values ( 2, '', 102, '', repeat(@s2,1)); insert into t1 values ( 3, repeat(@s0,545), 103, repeat(@s2,788), repeat(@s0,1)); insert into t1 values ( 4, repeat(@s1,38), 104, repeat(@s0,260), repeat(@s0,1)); insert into t1 values ( 5, repeat(@s2,12), 105, repeat(@s2,40), repeat(@s1,1)); insert into t1 values ( 6, repeat(@s1,242), 106, NULL, repeat(@s1,1)); insert into t1 values ( 7, repeat(@s1,30), 107, repeat(@s0,161), ''); insert into t1 values ( 8, repeat(@s1,719), 108, repeat(@s2,104), NULL); insert into t1 values ( 9, repeat(@s2,427), NULL, NULL, NULL); select 'M', a, sha1(b), c, sha1(d), sha1(e) from t1 order by a; --sync_slave_with_master --sleep 5 --connection slave select 'S', a, sha1(b), c, sha1(d), sha1(e) from t1 order by a; --connection master drop table t1; --sync_slave_with_master # # view the binlog # --connection master let $VERSION=`select version()`; --replace_result $VERSION VERSION show binlog events;
sql/ha_ndbcluster.cc +42 −42 Original line number Diff line number Diff line Loading @@ -840,51 +840,51 @@ int get_ndb_blobs_value(TABLE* table, NdbValue* value_array, { Field *field= table->field[i]; NdbValue value= value_array[i]; if (value.ptr != NULL && (field->flags & BLOB_FLAG)) if (! (field->flags & BLOB_FLAG)) continue; if (value.blob == NULL) { DBUG_PRINT("info",("[%u] skipped", i)); continue; } Field_blob *field_blob= (Field_blob *)field; NdbBlob *ndb_blob= value.blob; int isNull; ndb_blob->getDefined(isNull); if (isNull == 0) { // XXX -1 should be allowed only for events Uint64 blob_len= 0; if (ndb_blob->getLength(blob_len) != 0) DBUG_RETURN(-1); if (ndb_blob->getNull(isNull) != 0) ERR_RETURN(ndb_blob->getNdbError()); if (isNull == 0) { Uint64 len64= 0; if (ndb_blob->getLength(len64) != 0) ERR_RETURN(ndb_blob->getNdbError()); // Align to Uint64 uint32 blob_size= blob_len; if (blob_size % 8 != 0) blob_size+= 8 - blob_size % 8; uint32 size= len64; if (size % 8 != 0) size+= 8 - size % 8; if (loop == 1) { char *buf= buffer + offset; uint32 len= 0xffffffff; // Max uint32 DBUG_PRINT("info", ("read blob ptr=%p len=%u", buf, (uint) blob_len)); if (ndb_blob->readData(buf, len) != 0) DBUG_RETURN(-1); DBUG_PRINT("info", ("blob field %d offset=%u len=%u [ptrdiff=%d]", i, offset, len, (int)ptrdiff)); DBUG_ASSERT(len == blob_len); ERR_RETURN(ndb_blob->getNdbError()); DBUG_PRINT("info", ("[%u] offset=%u buf=%p len=%u [ptrdiff=%d]", i, offset, buf, len, (int)ptrdiff)); DBUG_ASSERT(len == len64); // Ugly hack assumes only ptr needs to be changed field_blob->ptr+= ptrdiff; field_blob->set_ptr(len, buf); field_blob->ptr-= ptrdiff; } offset+= blob_size; offset+= size; } else { if (loop == 1) else if (loop == 1) // undefined or null { // have to set length even in this case char *buf= buffer + offset; char *buf= buffer + offset; // or maybe NULL uint32 len= 0; field_blob->ptr+= ptrdiff; field_blob->set_ptr(len, buf); field_blob->ptr-= ptrdiff; DBUG_PRINT("info", ("blob field %d isNull=%d", i, isNull)); } } DBUG_PRINT("info", ("[%u] isNull=%d", i, isNull)); } } if (loop == 0 && offset > buffer_size) Loading
sql/ha_ndbcluster_binlog.cc +14 −0 Original line number Diff line number Diff line Loading @@ -2084,6 +2084,20 @@ ndbcluster_create_event_ops(NDB_SHARE *share, const NDBTAB *ndbtab, DBUG_PRINT("info", ("%s blob", col_name)); attr0.blob= op->getBlobHandle(col_name); attr1.blob= op->getPreBlobHandle(col_name); if (attr0.blob == NULL || attr1.blob == NULL) { sql_print_error("NDB Binlog: Creating NdbEventOperation" " blob field %u handles failed (code=%d) for %s", j, op->getNdbError().code, event_name); push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR, ER_GET_ERRMSG, ER(ER_GET_ERRMSG), op->getNdbError().code, op->getNdbError().message, "NDB"); ndb->dropEventOperation(op); pthread_mutex_unlock(&injector_mutex); DBUG_RETURN(-1); } } } else Loading