summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <kent@kent-amd64.(none)>2007-03-07 23:08:54 +0100
committerunknown <kent@kent-amd64.(none)>2007-03-07 23:08:54 +0100
commit5125af62c9a9c7b4e177313a67dd76661d8ce1f8 (patch)
treee5cd79a7e08bbda410991709fac41be19bc44dee
parentd203b18ee46024cf5674a494b559786f15568295 (diff)
parent23db3ebf6f30f454a7621693ab5d5f63bd03edc3 (diff)
downloadmariadb-git-5125af62c9a9c7b4e177313a67dd76661d8ce1f8.tar.gz
Merge kboortz@bk-internal.mysql.com:/home/bk/mysql-5.1
into mysql.com:/home/kent/bk/tmp/mysql-5.1-build
-rwxr-xr-xBUILD/SETUP.sh1
-rw-r--r--Docs/Makefile.am5
-rw-r--r--EXCEPTIONS-CLIENT117
-rw-r--r--storage/myisam/mi_open.c2
-rw-r--r--storage/ndb/src/common/debugger/EventLogger.cpp2
-rw-r--r--storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp15
-rw-r--r--storage/ndb/src/kernel/blocks/tsman.cpp5
-rw-r--r--storage/ndb/src/kernel/vm/RWPool.cpp14
-rw-r--r--storage/ndb/src/kernel/vm/RWPool.hpp4
-rw-r--r--storage/ndb/src/kernel/vm/WOPool.cpp2
-rw-r--r--storage/ndb/src/kernel/vm/WOPool.hpp6
-rw-r--r--storage/ndb/src/ndbapi/NdbRecAttr.cpp32
-rw-r--r--storage/ndb/test/ndbapi/testNodeRestart.cpp66
-rw-r--r--storage/ndb/tools/restore/Restore.cpp7
-rw-r--r--support-files/mysql.spec.sh44
-rw-r--r--unittest/mysys/base64-t.c7
16 files changed, 280 insertions, 49 deletions
diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh
index 11dd67d5de0..6b3708f475f 100755
--- a/BUILD/SETUP.sh
+++ b/BUILD/SETUP.sh
@@ -172,6 +172,7 @@ max_configs="$SSL_LIBRARY --with-plugins=max --with-embedded-server"
alpha_cflags="$check_cpu_cflags -Wa,-m$cpu_flag"
amd64_cflags="$check_cpu_cflags"
amd64_cxxflags="" # If dropping '--with-big-tables', add here "-DBIG_TABLES"
+pentium_cflags="$check_cpu_cflags"
pentium64_cflags="$check_cpu_cflags -m64"
ppc_cflags="$check_cpu_cflags"
sparc_cflags=""
diff --git a/Docs/Makefile.am b/Docs/Makefile.am
index 05757618a8b..e57a1abcb0c 100644
--- a/Docs/Makefile.am
+++ b/Docs/Makefile.am
@@ -17,7 +17,7 @@ noinst_SCRIPTS = generate-text-files.pl
EXTRA_DIST = $(noinst_SCRIPTS) manual.chm mysql.info INSTALL-BINARY
-TXT_FILES= ../INSTALL-SOURCE ../INSTALL-WIN-SOURCE ../EXCEPTIONS-CLIENT \
+TXT_FILES= ../INSTALL-SOURCE ../INSTALL-WIN-SOURCE \
INSTALL-BINARY ../support-files/MacOSX/ReadMe.txt
all-local: $(TXT_FILES)
@@ -55,9 +55,6 @@ GT = $(srcdir)/generate-text-files.pl
INSTALL-BINARY: $(srcdir)/mysql.info $(GT)
perl -w $(GT) $(srcdir)/mysql.info "installing-binary" "installing-source" > $@
-../EXCEPTIONS-CLIENT: $(srcdir)/mysql.info $(GT)
- perl -w $(GT) $(srcdir)/mysql.info "mysql-floss-license-exception" "function-index" > $@
-
../support-files/MacOSX/ReadMe.txt: $(srcdir)/mysql.info $(GT)
perl -w $(GT) $(srcdir)/mysql.info "mac-os-x-installation" "netware-installation" > $@
diff --git a/EXCEPTIONS-CLIENT b/EXCEPTIONS-CLIENT
new file mode 100644
index 00000000000..19b86cab32b
--- /dev/null
+++ b/EXCEPTIONS-CLIENT
@@ -0,0 +1,117 @@
+MySQL FLOSS License Exception
+
+The MySQL AB Exception for Free/Libre and Open Source
+Software-only Applications Using MySQL Client Libraries (the
+"FLOSS Exception").
+
+Version 0.5, 30 August 2006
+
+Exception Intent
+
+We want specified Free/Libre and Open Source Software (``FLOSS'')
+applications to be able to use specified GPL-licensed MySQL client
+libraries (the ``Program'') despite the fact that not all FLOSS
+licenses are compatible with version 2 of the GNU General Public
+License (the ``GPL'').
+
+Legal Terms and Conditions
+
+As a special exception to the terms and conditions of version 2.0
+of the GPL:
+
+ 1. You are free to distribute a Derivative Work that is formed
+ entirely from the Program and one or more works (each, a
+ "FLOSS Work") licensed under one or more of the licenses
+ listed below in section 1, as long as:
+ a. You obey the GPL in all respects for the Program and the
+ Derivative Work, except for identifiable sections of the
+ Derivative Work which are not derived from the Program,
+ and which can reasonably be considered independent and
+ separate works in themselves,
+ b. all identifiable sections of the Derivative Work which
+ are not derived from the Program, and which can
+ reasonably be considered independent and separate works
+ in themselves,
+ i. are distributed subject to one of the FLOSS licenses
+ listed below, and
+ ii. the object code or executable form of those sections
+ are accompanied by the complete corresponding
+ machine-readable source code for those sections on
+ the same medium and under the same FLOSS license as
+ the corresponding object code or executable forms of
+ those sections, and
+ c. any works which are aggregated with the Program or with a
+ Derivative Work on a volume of a storage or distribution
+ medium in accordance with the GPL, can reasonably be
+ considered independent and separate works in themselves
+ which are not derivatives of either the Program, a
+ Derivative Work or a FLOSS Work.
+ If the above conditions are not met, then the Program may only
+ be copied, modified, distributed or used under the terms and
+ conditions of the GPL or another valid licensing option from
+ MySQL AB.
+
+ 2. FLOSS License List
+
+License name Version(s)/Copyright Date
+Academic Free License 2.0
+Apache Software License 1.0/1.1/2.0
+Apple Public Source License 2.0
+Artistic license From Perl 5.8.0
+BSD license "July 22 1999"
+Common Public License 1.0
+GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1
+Jabber Open Source License 1.0
+MIT license ---
+Mozilla Public License (MPL) 1.0/1.1
+Open Software License 2.0
+OpenSSL license (with original SSLeay license) "2003" ("1998")
+PHP License 3.0
+Python license (CNRI Python License) ---
+Python Software Foundation License 2.1.1
+Sleepycat License "1999"
+University of Illinois/NCSA Open Source License ---
+W3C License "2001"
+X11 License "2001"
+Zlib/libpng License ---
+Zope Public License 2.0
+
+ Due to the many variants of some of the above licenses, we
+ require that any version follow the 2003 version of the Free
+ Software Foundation's Free Software Definition
+ (http://www.gnu.org/philosophy/free-sw.html) or version 1.9 of
+ the Open Source Definition by the Open Source Initiative
+ (http://www.opensource.org/docs/definition.php).
+
+ 3. Definitions
+
+ a. Terms used, but not defined, herein shall have the
+ meaning provided in the GPL.
+ b. Derivative Work means a derivative work under copyright
+ law.
+
+ 4. Applicability: This FLOSS Exception applies to all Programs
+ that contain a notice placed by MySQL AB saying that the
+ Program may be distributed under the terms of this FLOSS
+ Exception. If you create or distribute a work which is a
+ Derivative Work of both the Program and any other work
+ licensed under the GPL, then this FLOSS Exception is not
+ available for that work; thus, you must remove the FLOSS
+ Exception notice from that work and comply with the GPL in all
+ respects, including by retaining all GPL notices. You may
+ choose to redistribute a copy of the Program exclusively under
+ the terms of the GPL by removing the FLOSS Exception notice
+ from that copy of the Program, provided that the copy has
+ never been modified by you or any third party.
+
+Appendix A. Qualified Libraries and Packages
+
+The following is a non-exhaustive list of libraries and packages
+which are covered by the FLOSS License Exception. Please note that
+this appendix is provided merely as an additional service to
+specific FLOSS projects wishing to simplify licensing information
+for their users. Compliance with one of the licenses noted under
+the "FLOSS license list" section remains a prerequisite.
+
+Package Name Qualifying License and Version
+Apache Portable Runtime (APR) Apache Software License 2.0
diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c
index 830332fe0c1..5db5bc561d1 100644
--- a/storage/myisam/mi_open.c
+++ b/storage/myisam/mi_open.c
@@ -506,6 +506,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
share->data_file_type = DYNAMIC_RECORD;
my_afree((gptr) disk_cache);
mi_setup_functions(share);
+#ifdef HAVE_MMAP
if (open_flags & HA_OPEN_MMAP)
{
info.s= share;
@@ -522,6 +523,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
share->file_write= mi_mmap_pwrite;
}
}
+#endif /* HAVE_MMAP */
share->is_log_table= FALSE;
#ifdef THREAD
thr_lock_init(&share->lock);
diff --git a/storage/ndb/src/common/debugger/EventLogger.cpp b/storage/ndb/src/common/debugger/EventLogger.cpp
index 4e9ba906645..17694fa6718 100644
--- a/storage/ndb/src/common/debugger/EventLogger.cpp
+++ b/storage/ndb/src/common/debugger/EventLogger.cpp
@@ -963,7 +963,7 @@ const EventLoggerBase::EventRepLogLevelMatrix EventLoggerBase::matrix[] = {
ROW(NDBStopCompleted, LogLevel::llStartUp, 1, Logger::LL_INFO ),
ROW(NDBStopForced, LogLevel::llStartUp, 1, Logger::LL_ALERT ),
ROW(NDBStopAborted, LogLevel::llStartUp, 1, Logger::LL_INFO ),
- ROW(StartREDOLog, LogLevel::llStartUp, 10, Logger::LL_INFO ),
+ ROW(StartREDOLog, LogLevel::llStartUp, 4, Logger::LL_INFO ),
ROW(StartLog, LogLevel::llStartUp, 10, Logger::LL_INFO ),
ROW(UNDORecordsExecuted, LogLevel::llStartUp, 15, Logger::LL_INFO ),
ROW(StartReport, LogLevel::llStartUp, 4, Logger::LL_INFO ),
diff --git a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
index db28daea336..b8882d72913 100644
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
@@ -441,6 +441,7 @@ void Dblqh::execCONTINUEB(Signal* signal)
else
{
jam();
+ cstartRecReq = 2;
ndbrequire(c_redo_complete_fragments.isEmpty());
StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend();
conf->startingNodeId = getOwnNodeId();
@@ -11936,7 +11937,7 @@ void Dblqh::execGCP_SAVEREQ(Signal* signal)
return;
}
- if (getNodeState().getNodeRestartInProgress() && cstartRecReq == ZFALSE)
+ if (getNodeState().getNodeRestartInProgress() && cstartRecReq < 2)
{
GCPSaveRef * const saveRef = (GCPSaveRef*)&signal->theData[0];
saveRef->dihPtr = dihPtr;
@@ -12248,6 +12249,10 @@ void Dblqh::execFSCLOSECONF(Signal* signal)
// Set the prev file to check if we shall close it.
logFilePtr.i = logFilePtr.p->prevLogFile;
ptrCheckGuard(logFilePtr, clogFileFileSize, logFileRecord);
+
+ logPartPtr.i = logFilePtr.p->logPartRec;
+ ptrCheckGuard(logPartPtr, clogPartFileSize, logPartRecord);
+
exitFromInvalidate(signal);
return;
case LogFileRecord::CLOSING_INIT:
@@ -14017,7 +14022,7 @@ void Dblqh::execRESTORE_LCP_CONF(Signal* signal)
return;
}
- if (c_lcp_restoring_fragments.isEmpty() && cstartRecReq == ZTRUE)
+ if (c_lcp_restoring_fragments.isEmpty() && cstartRecReq == 1)
{
jam();
/* ----------------------------------------------------------------
@@ -14058,7 +14063,7 @@ void Dblqh::execSTART_RECREQ(Signal* signal)
ndbrequire(req->receivingNodeId == cownNodeid);
cnewestCompletedGci = cnewestGci;
- cstartRecReq = ZTRUE;
+ cstartRecReq = 1;
for (logPartPtr.i = 0; logPartPtr.i < 4; logPartPtr.i++) {
ptrAss(logPartPtr, logPartRecord);
logPartPtr.p->logPartNewestCompletedGCI = cnewestCompletedGci;
@@ -14072,6 +14077,7 @@ void Dblqh::execSTART_RECREQ(Signal* signal)
*------------------------------------------------------------------------ */
if(cstartType == NodeState::ST_INITIAL_NODE_RESTART){
jam();
+ cstartRecReq = 2;
StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend();
conf->startingNodeId = getOwnNodeId();
sendSignal(cmasterDihBlockref, GSN_START_RECCONF, signal,
@@ -15893,6 +15899,7 @@ void Dblqh::srFourthComp(Signal* signal)
return;
}
}
+ cstartRecReq = 2;
StartRecConf * conf = (StartRecConf*)signal->getDataPtrSend();
conf->startingNodeId = getOwnNodeId();
sendSignal(cmasterDihBlockref, GSN_START_RECCONF, signal,
@@ -16761,7 +16768,7 @@ void Dblqh::initialiseRecordsLab(Signal* signal, Uint32 data,
cnoActiveCopy = 0;
ccurrentGcprec = RNIL;
caddNodeState = ZFALSE;
- cstartRecReq = ZFALSE;
+ cstartRecReq = 0;
cnewestGci = 0;
cnewestCompletedGci = 0;
crestartOldestGci = 0;
diff --git a/storage/ndb/src/kernel/blocks/tsman.cpp b/storage/ndb/src/kernel/blocks/tsman.cpp
index daf7750a7e6..99fbc683cee 100644
--- a/storage/ndb/src/kernel/blocks/tsman.cpp
+++ b/storage/ndb/src/kernel/blocks/tsman.cpp
@@ -1840,6 +1840,7 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal)
ndbrequire(m_file_hash.find(file_ptr, file_key));
struct req val = lookup_extent(req.key.m_page_no, file_ptr.p);
+ Uint32 page_no_in_extent = calc_page_no_in_extent(req.key.m_page_no, &val);
Page_cache_client::Request preq;
preq.m_page.m_page_no = val.m_extent_page_no;
@@ -1865,7 +1866,6 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal)
ndbrequire(header->m_table == req.request.table_id);
- Uint32 page_no_in_extent = calc_page_no_in_extent(req.key.m_page_no, &val);
Uint32 word = header->get_free_word_offset(page_no_in_extent);
Uint32 shift = SZ * (page_no_in_extent & 7);
@@ -1925,8 +1925,7 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal)
found:
header->update_free_bits(page_no, src_bits | UNCOMMITTED_MASK);
rep->bits= (src_bits & UNCOMMITTED_MASK) >> UNCOMMITTED_SHIFT;
- rep->key.m_page_no=
- val.m_extent_pages + val.m_extent_no * val.m_extent_size + page_no;
+ rep->key.m_page_no = req.key.m_page_no + page_no - page_no_in_extent;
rep->reply.errorCode= 0;
return;
}
diff --git a/storage/ndb/src/kernel/vm/RWPool.cpp b/storage/ndb/src/kernel/vm/RWPool.cpp
index 040e6ddac45..192a8f87402 100644
--- a/storage/ndb/src/kernel/vm/RWPool.cpp
+++ b/storage/ndb/src/kernel/vm/RWPool.cpp
@@ -22,7 +22,7 @@
RWPool::RWPool()
{
bzero(this, sizeof(* this));
- m_current_pos = GLOBAL_PAGE_SIZE_WORDS;
+ m_current_pos = RWPage::RWPAGE_WORDS;
m_current_first_free = REC_NIL;
m_first_free_page = RNIL;
}
@@ -57,7 +57,7 @@ seize_free:
m_current_first_free = pageP->m_data[pos+m_record_info.m_offset_next_pool];
return true;
}
- else if (pos + size < GLOBAL_PAGE_SIZE_WORDS)
+ else if (pos + size < RWPage::RWPAGE_WORDS)
{
seize_first:
ptr.i = (m_current_page_no << POOL_RECORD_BITS) + pos;
@@ -81,11 +81,14 @@ seize_first:
{
pageP = m_current_page = m_memroot + m_first_free_page;
m_current_page_no = m_first_free_page;
- m_current_pos = GLOBAL_PAGE_SIZE_WORDS;
+ m_current_pos = RWPage::RWPAGE_WORDS;
m_current_first_free = m_current_page->m_first_free;
m_first_free_page = m_current_page->m_next_page;
m_current_ref_count = m_current_page->m_ref_count;
- (m_memroot + m_first_free_page)->m_prev_page = RNIL;
+ if (m_first_free_page != RNIL)
+ {
+ (m_memroot + m_first_free_page)->m_prev_page = RNIL;
+ }
goto seize_free;
}
@@ -105,7 +108,7 @@ seize_first:
m_current_page = 0;
m_current_page_no = RNIL;
- m_current_pos = GLOBAL_PAGE_SIZE_WORDS;
+ m_current_pos = RWPage::RWPAGE_WORDS;
m_current_first_free = REC_NIL;
return false;
@@ -154,6 +157,7 @@ RWPool::release(Ptr<void> ptr)
}
page->m_next_page = ffp;
page->m_prev_page = RNIL;
+ m_first_free_page = ptr_page;
return;
}
else if(ref_cnt == 1)
diff --git a/storage/ndb/src/kernel/vm/RWPool.hpp b/storage/ndb/src/kernel/vm/RWPool.hpp
index 1da27c56799..13001b4d9dc 100644
--- a/storage/ndb/src/kernel/vm/RWPool.hpp
+++ b/storage/ndb/src/kernel/vm/RWPool.hpp
@@ -20,12 +20,14 @@
struct RWPage
{
+ STATIC_CONST( RWPAGE_WORDS = GLOBAL_PAGE_SIZE_WORDS - 4 );
+
Uint32 m_type_id;
Uint16 m_first_free;
Uint16 m_ref_count;
Uint32 m_next_page;
Uint32 m_prev_page;
- Uint32 m_data[GLOBAL_PAGE_SIZE_WORDS - 4];
+ Uint32 m_data[RWPAGE_WORDS];
};
/**
diff --git a/storage/ndb/src/kernel/vm/WOPool.cpp b/storage/ndb/src/kernel/vm/WOPool.cpp
index 634d8b03ea7..e318001da30 100644
--- a/storage/ndb/src/kernel/vm/WOPool.cpp
+++ b/storage/ndb/src/kernel/vm/WOPool.cpp
@@ -20,7 +20,7 @@
WOPool::WOPool()
{
bzero(this, sizeof(* this));
- m_current_pos = GLOBAL_PAGE_SIZE_WORDS;
+ m_current_pos = WOPage::WOPAGE_WORDS;
}
void
diff --git a/storage/ndb/src/kernel/vm/WOPool.hpp b/storage/ndb/src/kernel/vm/WOPool.hpp
index 6e852b580df..f38716b98f3 100644
--- a/storage/ndb/src/kernel/vm/WOPool.hpp
+++ b/storage/ndb/src/kernel/vm/WOPool.hpp
@@ -20,9 +20,11 @@
struct WOPage
{
+ STATIC_CONST( WOPAGE_WORDS = GLOBAL_PAGE_SIZE_WORDS - 2 );
+
Uint32 m_type_id;
Uint32 m_ref_count;
- Uint32 m_data[GLOBAL_PAGE_SIZE_WORDS - 2];
+ Uint32 m_data[WOPAGE_WORDS];
};
/**
@@ -61,7 +63,7 @@ WOPool::seize(Ptr<void>& ptr)
Uint32 pos = m_current_pos;
Uint32 size = m_record_info.m_size;
WOPage *pageP = m_current_page;
- if (likely(pos + size < GLOBAL_PAGE_SIZE_WORDS))
+ if (likely(pos + size < WOPage::WOPAGE_WORDS))
{
ptr.i = (m_current_page_no << POOL_RECORD_BITS) + pos;
ptr.p = (pageP->m_data + pos);
diff --git a/storage/ndb/src/ndbapi/NdbRecAttr.cpp b/storage/ndb/src/ndbapi/NdbRecAttr.cpp
index b633b14465c..188e718d968 100644
--- a/storage/ndb/src/ndbapi/NdbRecAttr.cpp
+++ b/storage/ndb/src/ndbapi/NdbRecAttr.cpp
@@ -343,24 +343,24 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
}
break;
case NdbDictionary::Column::Blob:
- {
- const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef();
- out << h->length << ":";
- const unsigned char* p = (const unsigned char*)(h + 1);
- unsigned n = r.get_size_in_bytes() - sizeof(*h);
- for (unsigned k = 0; k < n && k < h->length; k++)
- out.print("%02X", (int)p[k]);
- j = length;
- }
- break;
case NdbDictionary::Column::Text:
{
- const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef();
- out << h->length << ":";
- const unsigned char* p = (const unsigned char*)(h + 1);
- unsigned n = r.get_size_in_bytes() - sizeof(*h);
- for (unsigned k = 0; k < n && k < h->length; k++)
- out.print("%c", (int)p[k]);
+ // user defined aRef() may not be aligned to Uint64
+ NdbBlob::Head head;
+ memcpy(&head, r.aRef(), sizeof(head));
+ out << head.length << ":";
+ const unsigned char* p = (const unsigned char*)r.aRef() + sizeof(head);
+ if (r.get_size_in_bytes() < sizeof(head))
+ out << "***error***"; // really cannot happen
+ else {
+ unsigned n = r.get_size_in_bytes() - sizeof(head);
+ for (unsigned k = 0; k < n && k < head.length; k++) {
+ if (r.getType() == NdbDictionary::Column::Blob)
+ out.print("%02X", (int)p[k]);
+ else
+ out.print("%c", (int)p[k]);
+ }
+ }
j = length;
}
break;
diff --git a/storage/ndb/test/ndbapi/testNodeRestart.cpp b/storage/ndb/test/ndbapi/testNodeRestart.cpp
index 34cb356236c..b4ae95567eb 100644
--- a/storage/ndb/test/ndbapi/testNodeRestart.cpp
+++ b/storage/ndb/test/ndbapi/testNodeRestart.cpp
@@ -1353,6 +1353,68 @@ runBug26481(NDBT_Context* ctx, NDBT_Step* step)
return NDBT_OK;
}
+int
+runBug26450(NDBT_Context* ctx, NDBT_Step* step)
+{
+ Uint32 i;
+ int result = NDBT_OK;
+ int loops = ctx->getNumLoops();
+ int records = ctx->getNumRecords();
+ NdbRestarter res;
+ Ndb* pNdb = GETNDB(step);
+
+ int node = res.getRandomNotMasterNodeId(rand());
+ Vector<int> nodes;
+ for (unsigned i = 0; i<res.getNumDbNodes(); i++)
+ {
+ if (res.getDbNodeId(i) != node)
+ nodes.push_back(res.getDbNodeId(i));
+ }
+
+ if (res.restartAll())
+ return NDBT_FAILED;
+
+ if (res.waitClusterStarted())
+ return NDBT_FAILED;
+
+ ndbout_c("node: %d", node);
+ if (res.restartOneDbNode(node, false, true, true))
+ return NDBT_FAILED;
+
+ if (res.waitNodesNoStart(&node, 1))
+ return NDBT_FAILED;
+
+ if (runClearTable(ctx, step))
+ return NDBT_FAILED;
+
+ for (i = 0; i < 2; i++)
+ {
+ if (res.restartAll(false, true, i > 0))
+ return NDBT_FAILED;
+
+ if (res.waitClusterNoStart())
+ return NDBT_FAILED;
+
+ if (res.startNodes(nodes.getBase(), nodes.size()))
+ return NDBT_FAILED;
+
+ if (res.waitNodesStarted(nodes.getBase(), nodes.size()))
+ return NDBT_FAILED;
+ }
+
+ if (res.startNodes(&node, 1))
+ return NDBT_FAILED;
+
+ if (res.waitNodesStarted(&node, 1))
+ return NDBT_FAILED;
+
+ HugoTransactions trans (* ctx->getTab());
+ if (trans.selectCount(pNdb) != 0)
+ return NDBT_FAILED;
+
+ return NDBT_OK;
+}
+
NDBT_TESTSUITE(testNodeRestart);
TESTCASE("NoLoad",
"Test that one node at a time can be stopped and then restarted "\
@@ -1697,6 +1759,10 @@ TESTCASE("Bug26457", ""){
TESTCASE("Bug26481", ""){
INITIALIZER(runBug26481);
}
+TESTCASE("Bug26450", ""){
+ INITIALIZER(runLoadTable);
+ INITIALIZER(runBug26450);
+}
NDBT_TESTSUITE_END(testNodeRestart);
int main(int argc, const char** argv){
diff --git a/storage/ndb/tools/restore/Restore.cpp b/storage/ndb/tools/restore/Restore.cpp
index e95531fec06..3d466384782 100644
--- a/storage/ndb/tools/restore/Restore.cpp
+++ b/storage/ndb/tools/restore/Restore.cpp
@@ -59,7 +59,12 @@ BackupFile::Twiddle(const AttributeDesc* attr_desc, AttributeData* attr_data, Ui
return true;
case 64:
for(i = 0; i<arraySize; i++){
- attr_data->u_int64_value[i] = Twiddle64(attr_data->u_int64_value[i]);
+ // allow unaligned
+ char* p = (char*)&attr_data->u_int64_value[i];
+ Uint64 x;
+ memcpy(&x, p, sizeof(Uint64));
+ x = Twiddle64(x);
+ memcpy(p, &x, sizeof(Uint64));
}
return true;
default:
diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh
index a6a0247d11a..0671bd8a58c 100644
--- a/support-files/mysql.spec.sh
+++ b/support-files/mysql.spec.sh
@@ -562,6 +562,7 @@ fi
%doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1*
%doc %attr(644, root, man) %{_mandir}/man8/mysqlmanager.8*
%doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1*
+%doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1*
%doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1*
%doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1*
%doc %attr(644, root, man) %{_mandir}/man1/perror.1*
@@ -648,28 +649,42 @@ fi
%files ndb-tools
%defattr(-,root,root,0755)
+%attr(755, root, root) %{_bindir}/ndb_config
+%attr(755, root, root) %{_bindir}/ndb_desc
+%attr(755, root, root) %{_bindir}/ndb_error_reporter
%attr(755, root, root) %{_bindir}/ndb_mgm
+%attr(755, root, root) %{_bindir}/ndb_print_backup_file
+%attr(755, root, root) %{_bindir}/ndb_print_schema_file
+%attr(755, root, root) %{_bindir}/ndb_print_sys_file
%attr(755, root, root) %{_bindir}/ndb_restore
-%attr(755, root, root) %{_bindir}/ndb_waiter
%attr(755, root, root) %{_bindir}/ndb_select_all
%attr(755, root, root) %{_bindir}/ndb_select_count
-%attr(755, root, root) %{_bindir}/ndb_desc
%attr(755, root, root) %{_bindir}/ndb_show_tables
-%attr(755, root, root) %{_bindir}/ndb_test_platform
-%attr(755, root, root) %{_bindir}/ndb_config
-%attr(755, root, root) %{_bindir}/ndb_error_reporter
%attr(755, root, root) %{_bindir}/ndb_size.pl
-%attr(755, root, root) %{_bindir}/ndb_print_backup_file
-%attr(755, root, root) %{_bindir}/ndb_print_schema_file
-%attr(755, root, root) %{_bindir}/ndb_print_sys_file
+%attr(755, root, root) %{_bindir}/ndb_test_platform
+%attr(755, root, root) %{_bindir}/ndb_waiter
%attr(-, root, root) %{_datadir}/mysql/ndb_size.tmpl
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_config.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_desc.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_error_reporter.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_print_backup_file.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_print_schema_file.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_print_sys_file.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_select_all.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_select_count.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_show_tables.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_size.pl.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_waiter.1*
%files ndb-extra
%defattr(-,root,root,0755)
+%attr(755, root, root) %{_sbindir}/ndb_cpcd
+%attr(755, root, root) %{_bindir}/ndb_delete_all
%attr(755, root, root) %{_bindir}/ndb_drop_index
%attr(755, root, root) %{_bindir}/ndb_drop_table
-%attr(755, root, root) %{_bindir}/ndb_delete_all
-%attr(755, root, root) %{_sbindir}/ndb_cpcd
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_delete_all.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_drop_index.1*
+%doc %attr(644, root, man) %{_mandir}/man1/ndb_drop_table.1*
%files devel
%defattr(-, root, root, 0755)
@@ -710,6 +725,11 @@ fi
%attr(755, root, root) %{_bindir}/mysql_client_test
%attr(755, root, root) %{_bindir}/mysql_client_test_embedded
%attr(755, root, root) %{_bindir}/mysqltest_embedded
+%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1*
+%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test_embedded.1*
+%doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1*
+%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1*
+%doc %attr(644, root, man) %{_mandir}/man1/mysqltest_embedded.1*
%files embedded
%defattr(-, root, root, 0755)
@@ -719,6 +739,10 @@ fi
# itself - note that they must be ordered by date (important when
# merging BK trees)
%changelog
+* Fri Mar 02 2007 Joerg Bruehe <joerg@mysql.com>
+
+- Add several man pages for NDB which are now created.
+
* Fri Jan 05 2007 Kent Boortz <kent@mysql.com>
- Put back "libmygcc.a", found no real reason it was removed.
diff --git a/unittest/mysys/base64-t.c b/unittest/mysys/base64-t.c
index adef7d97aae..7e4afbb3128 100644
--- a/unittest/mysys/base64-t.c
+++ b/unittest/mysys/base64-t.c
@@ -18,13 +18,18 @@
#include <tap.h>
#include <string.h>
+#define BASE64_LOOP_COUNT 500
+#define BASE64_ROWS 4 /* Number of ok(..) */
+
int
main(void)
{
int i, cmp;
size_t j, k, l, dst_len, needed_length;
- for (i= 0; i < 500; i++)
+ plan(BASE64_LOOP_COUNT * BASE64_ROWS);
+
+ for (i= 0; i < BASE64_LOOP_COUNT; i++)
{
/* Create source data */
const size_t src_len= rand() % 1000 + 1;