Commit e4a9f06a authored by dlenev@jabberwock.site's avatar dlenev@jabberwock.site

Merge bk-internal.mysql.com:/home/bk/mysql-5.1-runtime

into  jabberwock.site:/home/dlenev/mysql-5.1-bg18437
parents 77f640b1 45b70962
...@@ -69,7 +69,7 @@ private: ...@@ -69,7 +69,7 @@ private:
inline char *Named_value::alloc_str(const LEX_STRING *str) inline char *Named_value::alloc_str(const LEX_STRING *str)
{ {
return my_strndup((const byte *) str->str, str->length, MYF(0)); return my_strndup(str->str, str->length, MYF(0));
} }
inline char *Named_value::alloc_str(const char *str) inline char *Named_value::alloc_str(const char *str)
......
...@@ -5839,7 +5839,7 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli) ...@@ -5839,7 +5839,7 @@ int Table_map_log_event::exec_event(st_relay_log_info *rli)
if (memory == NULL) if (memory == NULL)
DBUG_RETURN(HA_ERR_OUT_OF_MEM); DBUG_RETURN(HA_ERR_OUT_OF_MEM);
uint32 dummy_len; uint dummy_len;
bzero(table_list, sizeof(*table_list)); bzero(table_list, sizeof(*table_list));
table_list->db = db_mem; table_list->db = db_mem;
table_list->alias= table_list->table_name = tname_mem; table_list->alias= table_list->table_name = tname_mem;
......
...@@ -513,7 +513,7 @@ Rpl_filter::get_wild_ignore_table(String* str) ...@@ -513,7 +513,7 @@ Rpl_filter::get_wild_ignore_table(String* str)
const char* const char*
Rpl_filter::get_rewrite_db(const char* db, uint32 *new_len) Rpl_filter::get_rewrite_db(const char* db, uint *new_len)
{ {
if (rewrite_db.is_empty() || !db) if (rewrite_db.is_empty() || !db)
return db; return db;
......
...@@ -70,7 +70,7 @@ public: ...@@ -70,7 +70,7 @@ public:
void get_wild_do_table(String* str); void get_wild_do_table(String* str);
void get_wild_ignore_table(String* str); void get_wild_ignore_table(String* str);
const char* get_rewrite_db(const char* db, uint32 *new_len); const char* get_rewrite_db(const char* db, uint *new_len);
I_List<i_string>* get_do_db(); I_List<i_string>* get_do_db();
I_List<i_string>* get_ignore_db(); I_List<i_string>* get_ignore_db();
......
...@@ -1445,12 +1445,13 @@ Suma::initTable(Signal *signal, Uint32 tableId, TablePtr &tabPtr) ...@@ -1445,12 +1445,13 @@ Suma::initTable(Signal *signal, Uint32 tableId, TablePtr &tabPtr)
tabPtr.p->m_error = 0; tabPtr.p->m_error = 0;
tabPtr.p->m_schemaVersion = RNIL; tabPtr.p->m_schemaVersion = RNIL;
tabPtr.p->m_state = Table::DEFINING; tabPtr.p->m_state = Table::DEFINING;
tabPtr.p->m_hasTriggerDefined[0] = 0; tabPtr.p->m_drop_subbPtr.p = 0;
tabPtr.p->m_hasTriggerDefined[1] = 0; for (int j= 0; j < 3; j++)
tabPtr.p->m_hasTriggerDefined[2] = 0; {
tabPtr.p->m_triggerIds[0] = ILLEGAL_TRIGGER_ID; tabPtr.p->m_hasTriggerDefined[j] = 0;
tabPtr.p->m_triggerIds[1] = ILLEGAL_TRIGGER_ID; tabPtr.p->m_hasOutstandingTriggerReq[j] = 0;
tabPtr.p->m_triggerIds[2] = ILLEGAL_TRIGGER_ID; tabPtr.p->m_triggerIds[j] = ILLEGAL_TRIGGER_ID;
}
c_tables.add(tabPtr); c_tables.add(tabPtr);
...@@ -2491,6 +2492,13 @@ Suma::execSUB_STOP_REQ(Signal* signal){ ...@@ -2491,6 +2492,13 @@ Suma::execSUB_STOP_REQ(Signal* signal){
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
if (tabPtr.p->m_drop_subbPtr.p != 0) {
jam();
DBUG_PRINT("error", ("table locked"));
sendSubStopRef(signal, 1420);
DBUG_VOID_RETURN;
}
DBUG_PRINT("info",("subscription: %u tableId: %u[i=%u] id: %u key: %u", DBUG_PRINT("info",("subscription: %u tableId: %u[i=%u] id: %u key: %u",
subPtr.i, subPtr.p->m_tableId, tabPtr.i, subPtr.i, subPtr.p->m_tableId, tabPtr.i,
subPtr.p->m_subscriptionId,subPtr.p->m_subscriptionKey)); subPtr.p->m_subscriptionId,subPtr.p->m_subscriptionKey));
...@@ -2543,7 +2551,7 @@ Suma::execSUB_STOP_REQ(Signal* signal){ ...@@ -2543,7 +2551,7 @@ Suma::execSUB_STOP_REQ(Signal* signal){
subPtr.p->m_senderRef = senderRef; // store ref to requestor subPtr.p->m_senderRef = senderRef; // store ref to requestor
subPtr.p->m_senderData = senderData; // store ref to requestor subPtr.p->m_senderData = senderData; // store ref to requestor
tabPtr.p->m_drop_subbPtr= subbPtr; tabPtr.p->m_drop_subbPtr = subbPtr;
if (subPtr.p->m_state == Subscription::DEFINED) if (subPtr.p->m_state == Subscription::DEFINED)
{ {
...@@ -2560,6 +2568,7 @@ Suma::execSUB_STOP_REQ(Signal* signal){ ...@@ -2560,6 +2568,7 @@ Suma::execSUB_STOP_REQ(Signal* signal){
tabPtr.p->m_tableId, tabPtr.p->n_subscribers)); tabPtr.p->m_tableId, tabPtr.p->n_subscribers));
tabPtr.p->checkRelease(*this); tabPtr.p->checkRelease(*this);
sendSubStopComplete(signal, tabPtr.p->m_drop_subbPtr); sendSubStopComplete(signal, tabPtr.p->m_drop_subbPtr);
tabPtr.p->m_drop_subbPtr.p = 0;
} }
else else
{ {
...@@ -2894,6 +2903,9 @@ Suma::Table::dropTrigger(Signal* signal,Suma& suma) ...@@ -2894,6 +2903,9 @@ Suma::Table::dropTrigger(Signal* signal,Suma& suma)
jam(); jam();
DBUG_ENTER("Suma::dropTrigger"); DBUG_ENTER("Suma::dropTrigger");
m_hasOutstandingTriggerReq[0] =
m_hasOutstandingTriggerReq[1] =
m_hasOutstandingTriggerReq[2] = 1;
for(Uint32 j = 0; j<3; j++){ for(Uint32 j = 0; j<3; j++){
jam(); jam();
suma.suma_ndbrequire(m_triggerIds[j] != ILLEGAL_TRIGGER_ID); suma.suma_ndbrequire(m_triggerIds[j] != ILLEGAL_TRIGGER_ID);
...@@ -2972,14 +2984,18 @@ Suma::Table::runDropTrigger(Signal* signal, ...@@ -2972,14 +2984,18 @@ Suma::Table::runDropTrigger(Signal* signal,
suma.suma_ndbrequire(type < 3); suma.suma_ndbrequire(type < 3);
suma.suma_ndbrequire(m_triggerIds[type] == triggerId); suma.suma_ndbrequire(m_triggerIds[type] == triggerId);
suma.suma_ndbrequire(m_hasTriggerDefined[type] > 0);
suma.suma_ndbrequire(m_hasOutstandingTriggerReq[type] == 1);
m_hasTriggerDefined[type]--; m_hasTriggerDefined[type]--;
m_hasOutstandingTriggerReq[type] = 0;
if (m_hasTriggerDefined[type] == 0) if (m_hasTriggerDefined[type] == 0)
{ {
jam(); jam();
m_triggerIds[type] = ILLEGAL_TRIGGER_ID; m_triggerIds[type] = ILLEGAL_TRIGGER_ID;
} }
if( m_hasTriggerDefined[0] != m_hasTriggerDefined[1] || if( m_hasOutstandingTriggerReq[0] ||
m_hasTriggerDefined[0] != m_hasTriggerDefined[2]) m_hasOutstandingTriggerReq[1] ||
m_hasOutstandingTriggerReq[2])
{ {
// more to come // more to come
jam(); jam();
...@@ -2997,6 +3013,7 @@ Suma::Table::runDropTrigger(Signal* signal, ...@@ -2997,6 +3013,7 @@ Suma::Table::runDropTrigger(Signal* signal,
checkRelease(suma); checkRelease(suma);
suma.sendSubStopComplete(signal, m_drop_subbPtr); suma.sendSubStopComplete(signal, m_drop_subbPtr);
m_drop_subbPtr.p = 0;
} }
void Suma::suma_ndbrequire(bool v) { ndbrequire(v); } void Suma::suma_ndbrequire(bool v) { ndbrequire(v); }
...@@ -3551,13 +3568,17 @@ Suma::execDROP_TAB_CONF(Signal *signal) ...@@ -3551,13 +3568,17 @@ Suma::execDROP_TAB_CONF(Signal *signal)
DBUG_PRINT("info",("drop table id: %d[i=%u]", tableId, tabPtr.i)); DBUG_PRINT("info",("drop table id: %d[i=%u]", tableId, tabPtr.i));
tabPtr.p->m_state = Table::DROPPED; tabPtr.p->m_state = Table::DROPPED;
tabPtr.p->m_hasTriggerDefined[0] = 0; for (int j= 0; j < 3; j++)
tabPtr.p->m_hasTriggerDefined[1] = 0; {
tabPtr.p->m_hasTriggerDefined[2] = 0; if (!tabPtr.p->m_hasOutstandingTriggerReq[j])
tabPtr.p->m_triggerIds[0] = ILLEGAL_TRIGGER_ID; {
tabPtr.p->m_triggerIds[1] = ILLEGAL_TRIGGER_ID; tabPtr.p->m_hasTriggerDefined[j] = 0;
tabPtr.p->m_triggerIds[2] = ILLEGAL_TRIGGER_ID; tabPtr.p->m_hasOutstandingTriggerReq[j] = 0;
tabPtr.p->m_triggerIds[j] = ILLEGAL_TRIGGER_ID;
}
else
tabPtr.p->m_hasTriggerDefined[j] = 1;
}
if (senderRef == 0) if (senderRef == 0)
{ {
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
......
...@@ -301,7 +301,8 @@ public: ...@@ -301,7 +301,8 @@ public:
union { Uint32 m_tableId; Uint32 key; }; union { Uint32 m_tableId; Uint32 key; };
Uint32 m_schemaVersion; Uint32 m_schemaVersion;
Uint32 m_hasTriggerDefined[3]; // Insert/Update/Delete Uint8 m_hasTriggerDefined[3]; // Insert/Update/Delete
Uint8 m_hasOutstandingTriggerReq[3]; // Insert/Update/Delete
Uint32 m_triggerIds[3]; // Insert/Update/Delete Uint32 m_triggerIds[3]; // Insert/Update/Delete
Uint32 m_error; Uint32 m_error;
......
...@@ -484,6 +484,8 @@ ErrorBundle ErrorCodes[] = { ...@@ -484,6 +484,8 @@ ErrorBundle ErrorCodes[] = {
{ 1418, DMEC, SE, "Subscription dropped, no new subscribers allowed" }, { 1418, DMEC, SE, "Subscription dropped, no new subscribers allowed" },
{ 1419, DMEC, SE, "Subscription already dropped" }, { 1419, DMEC, SE, "Subscription already dropped" },
{ 1420, DMEC, TR, "Subscriber manager busy with adding/removing a table" },
{ 4004, DMEC, AE, "Attribute name not found in the Table" }, { 4004, DMEC, AE, "Attribute name not found in the Table" },
{ 4100, DMEC, AE, "Status Error in NDB" }, { 4100, DMEC, AE, "Status Error in NDB" },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment