mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 20:11:42 +01:00
Merge pnousiainen@bk-internal.mysql.com:/home/bk/mysql-5.1-new
into mysql.com:/space/pekka/ndb/version/my51 mysql-test/t/disabled.def: Auto merged
This commit is contained in:
commit
b3d7c316aa
8 changed files with 36 additions and 60 deletions
|
@ -41,6 +41,6 @@ rpl_row_basic_3innodb : Bug #17385
|
||||||
rpl_sp : Bug#16456
|
rpl_sp : Bug#16456
|
||||||
rpl_until : Unstable test case, bug#15886
|
rpl_until : Unstable test case, bug#15886
|
||||||
sp-goto : GOTO is currently is disabled - will be fixed in the future
|
sp-goto : GOTO is currently is disabled - will be fixed in the future
|
||||||
rpl_ndb_blob : Bug #17505
|
#rpl_ndb_blob : Bug #17505
|
||||||
rpl_ndb_blob2 : Bug #17505
|
rpl_ndb_blob2 : Bug #17505
|
||||||
rpl_ndb_log : results are not deterministic
|
rpl_ndb_log : results are not deterministic
|
||||||
|
|
|
@ -5525,7 +5525,7 @@ int ndbcluster_find_all_files(THD *thd)
|
||||||
{
|
{
|
||||||
NDBDICT::List::Element& elmt= list.elements[i];
|
NDBDICT::List::Element& elmt= list.elements[i];
|
||||||
int do_handle_table= 0;
|
int do_handle_table= 0;
|
||||||
if (IS_TMP_PREFIX(elmt.name))
|
if (IS_TMP_PREFIX(elmt.name) || IS_NDB_BLOB_PREFIX(elmt.name))
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Skipping %s.%s in NDB", elmt.database, elmt.name));
|
DBUG_PRINT("info", ("Skipping %s.%s in NDB", elmt.database, elmt.name));
|
||||||
continue;
|
continue;
|
||||||
|
@ -5662,7 +5662,7 @@ int ndbcluster_find_files(THD *thd,const char *db,const char *path,
|
||||||
for (i= 0 ; i < list.count ; i++)
|
for (i= 0 ; i < list.count ; i++)
|
||||||
{
|
{
|
||||||
NDBDICT::List::Element& elmt= list.elements[i];
|
NDBDICT::List::Element& elmt= list.elements[i];
|
||||||
if (IS_TMP_PREFIX(elmt.name))
|
if (IS_TMP_PREFIX(elmt.name) || IS_NDB_BLOB_PREFIX(elmt.name))
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Skipping %s.%s in NDB", elmt.database, elmt.name));
|
DBUG_PRINT("info", ("Skipping %s.%s in NDB", elmt.database, elmt.name));
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -2082,23 +2082,6 @@ ndbcluster_create_event_ops(NDB_SHARE *share, const NDBTAB *ndbtab,
|
||||||
if (share->flags & NSF_BLOB_FLAG)
|
if (share->flags & NSF_BLOB_FLAG)
|
||||||
op->mergeEvents(true); // currently not inherited from event
|
op->mergeEvents(true); // currently not inherited from event
|
||||||
|
|
||||||
if (share->flags & NSF_BLOB_FLAG)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Given servers S1 S2, following results in out-of-date
|
|
||||||
* event->m_tableImpl and column->m_blobTable.
|
|
||||||
*
|
|
||||||
* S1: create table t1(a int primary key);
|
|
||||||
* S2: drop table t1;
|
|
||||||
* S1: create table t2(a int primary key, b blob);
|
|
||||||
* S1: alter table t2 add x int;
|
|
||||||
* S1: alter table t2 drop x;
|
|
||||||
*
|
|
||||||
* TODO fix at right place before we get here
|
|
||||||
*/
|
|
||||||
ndb->getDictionary()->fix_blob_events(ndbtab, event_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
int n_columns= ndbtab->getNoOfColumns();
|
int n_columns= ndbtab->getNoOfColumns();
|
||||||
int n_fields= table ? table->s->fields : 0; // XXX ???
|
int n_fields= table ? table->s->fields : 0; // XXX ???
|
||||||
for (int j= 0; j < n_columns; j++)
|
for (int j= 0; j < n_columns; j++)
|
||||||
|
|
|
@ -1783,7 +1783,6 @@ public:
|
||||||
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
|
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
|
||||||
const Table * getTable(const char * name, void **data) const;
|
const Table * getTable(const char * name, void **data) const;
|
||||||
void set_local_table_data_size(unsigned sz);
|
void set_local_table_data_size(unsigned sz);
|
||||||
void fix_blob_events(const Table* table, const char* ev_name);
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -159,11 +159,16 @@ GlobalDictCache::get(const char * name)
|
||||||
switch(ver->m_status){
|
switch(ver->m_status){
|
||||||
case OK:
|
case OK:
|
||||||
ver->m_refCount++;
|
ver->m_refCount++;
|
||||||
|
DBUG_PRINT("info", ("Table OK version=%x.%x refCount=%u",
|
||||||
|
ver->m_impl->m_version & 0xFFFFFF,
|
||||||
|
ver->m_impl->m_version >> 24,
|
||||||
|
ver->m_refCount));
|
||||||
DBUG_RETURN(ver->m_impl);
|
DBUG_RETURN(ver->m_impl);
|
||||||
case DROPPED:
|
case DROPPED:
|
||||||
retreive = true; // Break loop
|
retreive = true; // Break loop
|
||||||
break;
|
break;
|
||||||
case RETREIVING:
|
case RETREIVING:
|
||||||
|
DBUG_PRINT("info", ("Wait for retrieving thread"));
|
||||||
NdbCondition_WaitTimeout(m_waitForTableCondition, m_mutex, waitTime);
|
NdbCondition_WaitTimeout(m_waitForTableCondition, m_mutex, waitTime);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -178,6 +183,7 @@ GlobalDictCache::get(const char * name)
|
||||||
tmp.m_status = RETREIVING;
|
tmp.m_status = RETREIVING;
|
||||||
tmp.m_refCount = 1; // The one retreiving it
|
tmp.m_refCount = 1; // The one retreiving it
|
||||||
versions->push_back(tmp);
|
versions->push_back(tmp);
|
||||||
|
DBUG_PRINT("info", ("No table found"));
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,8 +191,11 @@ NdbTableImpl *
|
||||||
GlobalDictCache::put(const char * name, NdbTableImpl * tab)
|
GlobalDictCache::put(const char * name, NdbTableImpl * tab)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("GlobalDictCache::put");
|
DBUG_ENTER("GlobalDictCache::put");
|
||||||
DBUG_PRINT("enter", ("name: %s, internal_name: %s",
|
DBUG_PRINT("enter", ("name: %s, internal_name: %s version: %x.%x",
|
||||||
name, tab ? tab->m_internalName.c_str() : "tab NULL"));
|
name,
|
||||||
|
tab ? tab->m_internalName.c_str() : "tab NULL",
|
||||||
|
tab ? tab->m_version & 0xFFFFFF : 0,
|
||||||
|
tab ? tab->m_version >> 24 : 0));
|
||||||
|
|
||||||
const Uint32 len = strlen(name);
|
const Uint32 len = strlen(name);
|
||||||
Vector<TableVersion> * vers = m_tableHash.getData(name, len);
|
Vector<TableVersion> * vers = m_tableHash.getData(name, len);
|
||||||
|
@ -218,12 +227,14 @@ GlobalDictCache::put(const char * name, NdbTableImpl * tab)
|
||||||
vers->erase(sz - 1);
|
vers->erase(sz - 1);
|
||||||
}
|
}
|
||||||
else if (ver.m_impl == 0) {
|
else if (ver.m_impl == 0) {
|
||||||
|
DBUG_PRINT("info", ("Table OK"));
|
||||||
ver.m_impl = tab;
|
ver.m_impl = tab;
|
||||||
ver.m_version = tab->m_version;
|
ver.m_version = tab->m_version;
|
||||||
ver.m_status = OK;
|
ver.m_status = OK;
|
||||||
}
|
}
|
||||||
else if (ver.m_impl == &f_invalid_table)
|
else if (ver.m_impl == &f_invalid_table)
|
||||||
{
|
{
|
||||||
|
DBUG_PRINT("info", ("Table DROPPED invalid"));
|
||||||
ver.m_impl = tab;
|
ver.m_impl = tab;
|
||||||
ver.m_version = tab->m_version;
|
ver.m_version = tab->m_version;
|
||||||
ver.m_status = DROPPED;
|
ver.m_status = DROPPED;
|
||||||
|
@ -231,6 +242,7 @@ GlobalDictCache::put(const char * name, NdbTableImpl * tab)
|
||||||
}
|
}
|
||||||
else if(ver.m_impl == &f_altered_table)
|
else if(ver.m_impl == &f_altered_table)
|
||||||
{
|
{
|
||||||
|
DBUG_PRINT("info", ("Table DROPPED altered"));
|
||||||
ver.m_impl = tab;
|
ver.m_impl = tab;
|
||||||
ver.m_version = tab->m_version;
|
ver.m_version = tab->m_version;
|
||||||
ver.m_status = DROPPED;
|
ver.m_status = DROPPED;
|
||||||
|
|
|
@ -1502,12 +1502,6 @@ NdbDictionary::Dictionary::getNdbError() const {
|
||||||
return m_impl.getNdbError();
|
return m_impl.getNdbError();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
NdbDictionary::Dictionary::fix_blob_events(const Table* table, const char* ev_name)
|
|
||||||
{
|
|
||||||
m_impl.fix_blob_events(table, ev_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// printers
|
// printers
|
||||||
|
|
||||||
NdbOut&
|
NdbOut&
|
||||||
|
|
|
@ -2767,16 +2767,28 @@ NdbDictInterface::execDROP_TABLE_REF(NdbApiSignal * signal,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
NdbDictionaryImpl::invalidateObject(NdbTableImpl & impl)
|
NdbDictionaryImpl::invalidateObject(NdbTableImpl & impl, bool lock)
|
||||||
{
|
{
|
||||||
const char * internalTableName = impl.m_internalName.c_str();
|
const char * internalTableName = impl.m_internalName.c_str();
|
||||||
DBUG_ENTER("NdbDictionaryImpl::invalidateObject");
|
DBUG_ENTER("NdbDictionaryImpl::invalidateObject");
|
||||||
DBUG_PRINT("enter", ("internal_name: %s", internalTableName));
|
DBUG_PRINT("enter", ("internal_name: %s", internalTableName));
|
||||||
|
|
||||||
|
if (lock)
|
||||||
|
m_globalHash->lock();
|
||||||
|
if (impl.m_noOfBlobs != 0) {
|
||||||
|
for (uint i = 0; i < impl.m_columns.size(); i++) {
|
||||||
|
NdbColumnImpl& c = *impl.m_columns[i];
|
||||||
|
if (! c.getBlobType() || c.getPartSize() == 0)
|
||||||
|
continue;
|
||||||
|
assert(c.m_blobTable != NULL);
|
||||||
|
invalidateObject(*c.m_blobTable, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
m_localHash.drop(internalTableName);
|
m_localHash.drop(internalTableName);
|
||||||
m_globalHash->lock();
|
|
||||||
impl.m_status = NdbDictionary::Object::Invalid;
|
impl.m_status = NdbDictionary::Object::Invalid;
|
||||||
m_globalHash->drop(&impl);
|
m_globalHash->drop(&impl);
|
||||||
m_globalHash->unlock();
|
if (lock)
|
||||||
|
m_globalHash->unlock();
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2784,6 +2796,8 @@ int
|
||||||
NdbDictionaryImpl::removeCachedObject(NdbTableImpl & impl, bool lock)
|
NdbDictionaryImpl::removeCachedObject(NdbTableImpl & impl, bool lock)
|
||||||
{
|
{
|
||||||
const char * internalTableName = impl.m_internalName.c_str();
|
const char * internalTableName = impl.m_internalName.c_str();
|
||||||
|
DBUG_ENTER("NdbDictionaryImpl::removeCachedObject");
|
||||||
|
DBUG_PRINT("enter", ("internal_name: %s", internalTableName));
|
||||||
|
|
||||||
if (lock)
|
if (lock)
|
||||||
m_globalHash->lock();
|
m_globalHash->lock();
|
||||||
|
@ -2800,7 +2814,7 @@ NdbDictionaryImpl::removeCachedObject(NdbTableImpl & impl, bool lock)
|
||||||
m_globalHash->release(&impl);
|
m_globalHash->release(&impl);
|
||||||
if (lock)
|
if (lock)
|
||||||
m_globalHash->unlock();
|
m_globalHash->unlock();
|
||||||
return 0;
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
|
@ -4709,30 +4723,6 @@ NdbDictInterface::parseFileInfo(NdbFileImpl &dst,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX temp
|
|
||||||
void
|
|
||||||
NdbDictionaryImpl::fix_blob_events(const NdbDictionary::Table* table, const char* ev_name)
|
|
||||||
{
|
|
||||||
const NdbTableImpl& t = table->m_impl;
|
|
||||||
const NdbEventImpl* ev = getEvent(ev_name);
|
|
||||||
assert(ev != NULL);
|
|
||||||
Uint32 i;
|
|
||||||
for (i = 0; i < t.m_columns.size(); i++) {
|
|
||||||
assert(t.m_columns[i] != NULL);
|
|
||||||
const NdbColumnImpl& c = *t.m_columns[i];
|
|
||||||
if (! c.getBlobType() || c.getPartSize() == 0)
|
|
||||||
continue;
|
|
||||||
char bename[200];
|
|
||||||
NdbBlob::getBlobEventName(bename, ev, &c);
|
|
||||||
// following fixes dict cache blob table
|
|
||||||
NdbEventImpl* bev = getEvent(bename);
|
|
||||||
if (c.m_blobTable != bev->m_tableImpl) {
|
|
||||||
// XXX const violation
|
|
||||||
((NdbColumnImpl*)&c)->m_blobTable = bev->m_tableImpl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template class Vector<int>;
|
template class Vector<int>;
|
||||||
template class Vector<Uint16>;
|
template class Vector<Uint16>;
|
||||||
template class Vector<Uint32>;
|
template class Vector<Uint32>;
|
||||||
|
|
|
@ -546,7 +546,7 @@ public:
|
||||||
int dropTable(const char * name);
|
int dropTable(const char * name);
|
||||||
int dropTable(NdbTableImpl &);
|
int dropTable(NdbTableImpl &);
|
||||||
int dropBlobTables(NdbTableImpl &);
|
int dropBlobTables(NdbTableImpl &);
|
||||||
int invalidateObject(NdbTableImpl &);
|
int invalidateObject(NdbTableImpl &, bool lock = true);
|
||||||
int removeCachedObject(NdbTableImpl &, bool lock = true);
|
int removeCachedObject(NdbTableImpl &, bool lock = true);
|
||||||
|
|
||||||
int createIndex(NdbIndexImpl &ix);
|
int createIndex(NdbIndexImpl &ix);
|
||||||
|
@ -604,8 +604,6 @@ public:
|
||||||
NdbDictInterface m_receiver;
|
NdbDictInterface m_receiver;
|
||||||
Ndb & m_ndb;
|
Ndb & m_ndb;
|
||||||
|
|
||||||
// XXX temp
|
|
||||||
void fix_blob_events(const NdbDictionary::Table* table, const char* ev_name);
|
|
||||||
private:
|
private:
|
||||||
NdbIndexImpl * getIndexImpl(const char * name,
|
NdbIndexImpl * getIndexImpl(const char * name,
|
||||||
const BaseString& internalName);
|
const BaseString& internalName);
|
||||||
|
|
Loading…
Add table
Reference in a new issue