diff options
author | tomas@poseidon.mysql.com <> | 2007-06-05 17:29:50 +0200 |
---|---|---|
committer | tomas@poseidon.mysql.com <> | 2007-06-05 17:29:50 +0200 |
commit | 47d5fb91d2872ff24d34b00170b67eea0de0d0e5 (patch) | |
tree | 4ea5a0b40aef51d97959bb781879666727c50af2 /storage/ndb/tools/restore | |
parent | 8c35f44b218a4d19954958dec2742c9bbb92ea40 (diff) | |
download | mariadb-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.cpp | 29 |
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); |