summaryrefslogtreecommitdiff
path: root/storage/ndb/tools/restore
diff options
context:
space:
mode:
authortomas@poseidon.mysql.com <>2007-06-05 17:29:50 +0200
committertomas@poseidon.mysql.com <>2007-06-05 17:29:50 +0200
commit47d5fb91d2872ff24d34b00170b67eea0de0d0e5 (patch)
tree4ea5a0b40aef51d97959bb781879666727c50af2 /storage/ndb/tools/restore
parent8c35f44b218a4d19954958dec2742c9bbb92ea40 (diff)
downloadmariadb-git-47d5fb91d2872ff24d34b00170b67eea0de0d0e5.tar.gz
Bug #28751 Lots of memory locked in memory causes high kswapd
- add odirect option for lcp+backup+redo log to lower CPU/kswapd usage - writing odirect removes need for kernel write buffers avoiding kswapd to kick in
Diffstat (limited to 'storage/ndb/tools/restore')
-rw-r--r--storage/ndb/tools/restore/Restore.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/storage/ndb/tools/restore/Restore.cpp b/storage/ndb/tools/restore/Restore.cpp
index 3d466384782..15e442a4f35 100644
--- a/storage/ndb/tools/restore/Restore.cpp
+++ b/storage/ndb/tools/restore/Restore.cpp
@@ -867,13 +867,32 @@ bool RestoreDataIterator::readFragmentHeader(int & ret, Uint32 *fragmentId)
debug << "RestoreDataIterator::getNextFragment" << endl;
- if (buffer_read(&Header, sizeof(Header), 1) != 1){
+ while (1)
+ {
+ /* read first part of header */
+ if (buffer_read(&Header, 8, 1) != 1)
+ {
+ ret = 0;
+ return false;
+ } // if
+
+ /* skip if EMPTY_ENTRY */
+ Header.SectionType = ntohl(Header.SectionType);
+ Header.SectionLength = ntohl(Header.SectionLength);
+ if (Header.SectionType == BackupFormat::EMPTY_ENTRY)
+ {
+ void *tmp;
+ buffer_get_ptr(&tmp, Header.SectionLength*4-8, 1);
+ continue;
+ }
+ break;
+ }
+ /* read rest of header */
+ if (buffer_read(((char*)&Header)+8, sizeof(Header)-8, 1) != 1)
+ {
ret = 0;
return false;
- } // if
-
- Header.SectionType = ntohl(Header.SectionType);
- Header.SectionLength = ntohl(Header.SectionLength);
+ }
Header.TableId = ntohl(Header.TableId);
Header.FragmentNo = ntohl(Header.FragmentNo);
Header.ChecksumType = ntohl(Header.ChecksumType);