1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-12-15 12:09:09 +03:00

Fixed several bugs exposed by setting the cache size to an

unreasonably small value.  Had to make a compromise to avoid a deadlock
though.  read/write/append/truncate will now be able to exceed the cache size
limit temporarily.  The cache will be reconciled at the end of the respective
operation.

Ex, given a cache of 100MB, and a read() of 500MB, all 500MB
of data being read will stay in the cache until it is read, then
400MB of it will be evicted.  Same on the write side.
This commit is contained in:
Patrick LeBlanc
2019-06-28 13:20:31 -05:00
parent 91585b4c6d
commit 715d041a85
9 changed files with 84 additions and 44 deletions

View File

@@ -30,6 +30,7 @@ class Synchronizer : public boost::noncopyable
// these take keys as parameters, not full path names, ex, pass in '12345' not
// 'cache/12345'.
void newJournalEntry(const std::string &key);
void newJournalEntries(const std::vector<std::string> &keys);
void newObjects(const std::vector<std::string> &keys);
void deletedObjects(const std::vector<std::string> &keys);
void flushObject(const std::string &key);
@@ -41,6 +42,7 @@ class Synchronizer : public boost::noncopyable
private:
Synchronizer();
void _newJournalEntry(const std::string &key);
void process(std::list<std::string>::iterator key);
void synchronize(const std::string &sourceFile, std::list<std::string>::iterator &it);
void synchronizeDelete(const std::string &sourceFile, std::list<std::string>::iterator &it);
@@ -86,7 +88,6 @@ class Synchronizer : public boost::noncopyable
const boost::chrono::seconds syncInterval = boost::chrono::seconds(10);
void periodicSync();
SMLogging *logger;
Cache *cache;
Replicator *replicator;