diff --git a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp index 271c317fcb4..6f096046440 100644 --- a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp +++ b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp @@ -1809,11 +1809,18 @@ NdbEventBuffer::insertDataL(NdbEventOperationImpl *op, } // merge is on so we do not report blob part events if (! is_blob_event) { - // report actual operation, not composite + // report actual operation and the composite // there is no way to "fix" the flags for a composite op // since the flags represent multiple ops on multiple PKs - EventBufData_list::Gci_op g = { op, (1 << sdata->operation) }; - bucket->m_data.add_gci_op(g); + // XXX fix by doing merge at end of epoch (extra mem cost) + { + EventBufData_list::Gci_op g = { op, (1 << sdata->operation) }; + bucket->m_data.add_gci_op(g); + } + { + EventBufData_list::Gci_op g = { op, (1 << data->sdata->operation) }; + bucket->m_data.add_gci_op(g); + } } } DBUG_RETURN_EVENT(0); diff --git a/storage/ndb/test/ndbapi/test_event_merge.cpp b/storage/ndb/test/ndbapi/test_event_merge.cpp index 7a9a1986793..6936e860065 100644 --- a/storage/ndb/test/ndbapi/test_event_merge.cpp +++ b/storage/ndb/test/ndbapi/test_event_merge.cpp @@ -1535,11 +1535,19 @@ selecttables() uint i; for (i = 0; i < maxrun(); i++) run(i).skip = false; + if (g_opts.opstring != 0) { + ll1("using all tables due to fixed ops"); + return; + } for (i = 0; i + 1 < maxrun(); i++) run(urandom(maxrun())).skip = true; uint cnt = 0; - for (i = 0; i < maxrun(); i++) - cnt += ! run(i).skip; + for (i = 0; i < maxrun(); i++) { + if (! run(i).skip) { + ll2("use table " << run(i).tabname); + cnt++; + } + } ll1("use " << cnt << "/" << maxrun() << " tables in this loop"); }