From: Jan Wedvik Date: June 7 2011 12:08pm Subject: bzr commit into mysql-5.1-telco-7.0 branch (jan.wedvik:4441) List-Archive: http://lists.mysql.com/commits/138760 Message-Id: <20110607120836.91E20223@fimafeng09.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1649439694774570013==" --===============1649439694774570013== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///net/atum17/export/home/tmp/jw159207/mysql/repo/mysql-5.1-telco-7.0/ based on revid:jonas@stripped 4441 Jan Wedvik 2011-06-07 This fix only applies to pushed queries (i.e. those using NdbQuery and the SPJ block). This commit fixes an error related to bushy scans where the right hand side (i.e. the scan that is executed several times for genrating a cross product) used pruning. The algoritm for couning how many fragments to scan only worked correctly for the first execution. The second execution would typically cause an assert. modified: storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp === modified file 'storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp' --- a/storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp 2011-05-25 09:31:27 +0000 +++ b/storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp 2011-06-07 12:08:29 +0000 @@ -4879,12 +4879,6 @@ Dbspj::scanIndex_parent_row(Signal* sign } Uint32 ptrI = fragPtr.p->m_rangePtrI; - if (ptrI == RNIL) - { - jam(); - data.m_frags_not_complete++; - } - bool hasNull; if (treeNodePtr.p->m_bits & TreeNode::T_KEYINFO_CONSTRUCTED) { @@ -4972,6 +4966,39 @@ Dbspj::scanIndex_parent_batch_complete(S data.m_rows_received = 0; data.m_rows_expecting = 0; ndbassert(data.m_frags_outstanding == 0); + ndbassert(data.m_frags_not_complete == 0); + + Ptr fragPtr; + { + Local_ScanFragHandle_list list(m_scanfraghandle_pool, data.m_fragments); + list.first(fragPtr); + + if ((treeNodePtr.p->m_bits & TreeNode::T_PRUNE_PATTERN) == 0) + { + if (fragPtr.p->m_rangePtrI != RNIL) + { + // No pruning, so we must scan all fragments. + jam(); + data.m_frags_not_complete = data.m_fragCount; + } + } + else + { + while(!fragPtr.isNull()) + { + if (fragPtr.p->m_rangePtrI != RNIL) + { + jam(); + /** + * This is a pruned scan, so we must scan those fragments that + * some distribution key hashed to. + */ + data.m_frags_not_complete++; + } + list.next(fragPtr); + } + } + } if (data.m_frags_not_complete == 0) { @@ -4981,11 +5008,6 @@ Dbspj::scanIndex_parent_batch_complete(S */ return; } - else if ((treeNodePtr.p->m_bits & TreeNode::T_PRUNE_PATTERN) == 0) - { - jam(); - data.m_frags_not_complete = data.m_fragCount; - } /** * When parent's batch is complete, we send our batch @@ -5014,7 +5036,6 @@ Dbspj::scanIndex_parent_batch_repeat(Sig DEBUG("Register TreeNode for restart, m_node_no: " << treeNodePtr.p->m_node_no); ndbrequire(treeNodePtr.p->m_state != TreeNode::TN_ACTIVE); registerActiveCursor(requestPtr, treeNodePtr); - data.m_frags_not_complete = 1; data.m_batch_chunks = 0; } } --===============1649439694774570013== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jan.wedvik@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jan.wedvik@stripped # target_branch: file:///net/atum17/export/home/tmp/jw159207/mysql\ # /repo/mysql-5.1-telco-7.0/ # testament_sha1: 9f734d7b91b793c4b3de4c987f8a9930b2b2e1ea # timestamp: 2011-06-07 14:08:36 +0200 # base_revision_id: jonas@stripped # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWWoN/eIAAkLfgFWQcX///393 foC////6UAWb2ywcpmUSAADDREyIZMmU/SNJ4iMGhGmmmIADJo0ZGgaTSMjU/QmppqbUHpAAAAA0 AAAA1T0aEaTUeiaepptT0yCDEYgAaYARhNPUOMmTRiGmhgJoYmjTJiBkYTRpphBkwkiCATTIaTJj UAITR6j1T2qfqT9RNoIwhskW44HJBRjmnLTHWFUTrhby/RhQSDCCKgZmI1VNrHpWPPmdkpqLdWLo q6emGHVGH60fhzIBEUkvE/5+K5nv6vxvZmIYw9rEim68CVHEZTNISslp2VZD12mPhqQT0QuMWk0c An2spPo3aYL7WsZVMJRsQ2mXYtGyB1MLXjfLg8Jov59LtLkfIlKDptQSoEopCJgbxKazmMqKlghz rgB0HYQPCYb5a022QIME48cEwrkkgbtL1hO5qWu3YcYhoWdAunB11uWTdvsiMEQJ8YrSqMZ+C5eI uXHn221abMSj6tFmkJJTXuKt3ch3UUt2709Om+ey3yksmEzDpsdup3AJP3DrAh3QSPJBOphRkMpK CixTDw+Qn5rTuYab+tEPd91KFPgYcL6ULJRlBQFeaYfQbMIq65QPiW5LsustMeVoavbcV0mk+Guz VWUp8kLFZRF81keZA69C4WrbOG/2qZTZbgcAsM4FCYBUWIS1SsXQQvIZYXEYheesRndTKKCqzIcc JLK5uJr4XAWwrIOkpBXVeajRVSAx9D5X5oWqMpMIAxrzZq467Au+feA5k5Zi9ojja9114XXIsJFV tXBnrsU1QQFNfQWT1xdOR0QdFwPAgpBPesFTasmkyY0lE3gnPYo7YZIuKNKBDynpBlcymPkQWGMW SmqYHAOLPCTpjmOYdoZmHmENwiuH6EKF7Gvo5CvAYCLap8zMz2Xaad+h8KHEEila8R60bvwwwPCH h+nVJoyUgZYkiqfw3FtwkZO5oaqfv38kyG0czIxTRH9XkVDI7CIe3v6j+vPNKNroLWBfK4fx0f2Z 8zDCH+mkMpJMUYR+Q8YjV319VYg6A5bUhs1EjEQsIqVNLM5xjOLOaV0aM4nDkBXqhRddX8sQ5eq/ uu9Kw30NqJfGnsR7xiyzXynnS7pcvVIpx1rCBFYJ7YisYGGKbzG/K7dfUnmqiHaKStP8/l8fhR5+ jV+ir5i/MuqUpFAGOWk8CHhthD/Y69kIz5xwK+Rd0pnlDVAogy1qkPk+aCW8FGAYhwiiW+yPYT2T IqnKpGMc/9ORYsTwx2jFsE7TsGbPlAcf8JEjUUwCClnbUyO5fQMCcHG1xjpU7gpWu1cqKVy6Tm7X 7ewmeudx4MaGR2+P1H4MRkxFmUoIzFzi+gRAYJtb7hOG5lgtZuCjobcvtZNokewgokpy1rEkYcDN sfp2Kp4409n/vLuJ7gOPaxStW5dYa75YLXnunImzKsrsZjO4NQaevDi+8VZZRuZex8vL7D6xteyZ coB19SZKvTszDRwb6f0R1BqCLhJj3WFqTczMaVNrLerKXQmrzZ9d2ibZu0jFI9+aGOn7S/ap0Zhs 3sdBIlEdfXSQ/kJUME2GZh06TjDSYHZiAQdao6JRZDHfJaVM5lrm0mChkmX2Cj2U+bGZm/775GRt V9CRSyLUog/lq49FRoGbJK8N/viq6JL2lOrNYVU/Kipc65aeLMuKqUSv9toQVXJrlfyttYHpRJQr JsYi5JgdLX8xhODAR67jZDLxqssRfvgUSqeFqI4Sau+VHEZPJO6oeLMmbCEG0MeC0BPnUaLkXNV0 bLSL4UGD7mqlc1DXBG1eElsDci6+s2V2Duo2g7SL4cIQU28225RgWTUWdPMgiOIrFG2UcNJrYCNd kLyNKuvsUwuDQv0Ed8ITYLGTz8ReiyM+f+se/otgw123Xdnwe02QY9U4tS52FgA4axXVHYk3wY3q U0zB9yx4prI5xiZ4I1VFFniXHjBaws/8XckU4UJBqDf3iA== --===============1649439694774570013==--