Add function to close all Db's and reload the databae environment
Adds a ReloadDbEnv function to BerkeleyEnvironment in order to close all Db
instances, closes the environment, resets it, and then reopens
the BerkeleyEnvironment.
Also adds a ReloadDbEnv function to BerkeleyDatabase that calls
BerkeleyEnvironment's ReloadDbEnv.
Github-Pull: #12493
Rebased-From: 5d296ac
This commit is contained in:
parent
2558be26e4
commit
cafa1709b6
2 changed files with 28 additions and 0 deletions
|
@ -674,6 +674,32 @@ void BerkeleyEnvironment::ReloadDbEnv()
|
||||||
Open(true);
|
Open(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BerkeleyEnvironment::ReloadDbEnv()
|
||||||
|
{
|
||||||
|
// Make sure that no Db's are in use
|
||||||
|
AssertLockNotHeld(cs_db);
|
||||||
|
std::unique_lock<CCriticalSection> lock(cs_db);
|
||||||
|
m_db_in_use.wait(lock, [this](){
|
||||||
|
for (auto& count : mapFileUseCount) {
|
||||||
|
if (count.second > 0) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
std::vector<std::string> filenames;
|
||||||
|
for (auto it : mapDb) {
|
||||||
|
filenames.push_back(it.first);
|
||||||
|
}
|
||||||
|
// Close the individual Db's
|
||||||
|
for (const std::string& filename : filenames) {
|
||||||
|
CloseDb(filename);
|
||||||
|
}
|
||||||
|
// Reset the environment
|
||||||
|
Flush(true); // This will flush and close the environment
|
||||||
|
Reset();
|
||||||
|
Open(true);
|
||||||
|
}
|
||||||
|
|
||||||
bool BerkeleyBatch::Rewrite(BerkeleyDatabase& database, const char* pszSkip)
|
bool BerkeleyBatch::Rewrite(BerkeleyDatabase& database, const char* pszSkip)
|
||||||
{
|
{
|
||||||
if (database.IsDummy()) {
|
if (database.IsDummy()) {
|
||||||
|
|
|
@ -169,6 +169,8 @@ public:
|
||||||
|
|
||||||
void ReloadDbEnv();
|
void ReloadDbEnv();
|
||||||
|
|
||||||
|
void ReloadDbEnv();
|
||||||
|
|
||||||
std::atomic<unsigned int> nUpdateCounter;
|
std::atomic<unsigned int> nUpdateCounter;
|
||||||
unsigned int nLastSeen;
|
unsigned int nLastSeen;
|
||||||
unsigned int nLastFlushed;
|
unsigned int nLastFlushed;
|
||||||
|
|
Loading…
Add table
Reference in a new issue