Reduced exclusive lock durations

This commit is contained in:
emeric
2023-11-19 16:17:27 +01:00
parent 575fec5727
commit 17a2a969e2
104 changed files with 881 additions and 705 deletions
+32 -30
View File
@@ -39,6 +39,7 @@
#include "services/database/TrackArtistLink.hpp"
#include "services/database/TrackList.hpp"
#include "services/database/TrackFeatures.hpp"
#include "services/database/TransactionChecker.hpp"
#include "services/database/User.hpp"
#include "EnumSetTraits.hpp"
#include "Migration.hpp"
@@ -46,6 +47,29 @@
namespace Database
{
WriteTransaction::WriteTransaction(RecursiveSharedMutex& mutex, Wt::Dbo::Session& session)
: _lock{ mutex },
_transaction{ session }
{
TransactionChecker::pushWriteTransaction(_transaction.session());
}
WriteTransaction::~WriteTransaction()
{
TransactionChecker::popWriteTransaction(_transaction.session());
}
ReadTransaction::ReadTransaction(Wt::Dbo::Session& session)
: _transaction{ session }
{
TransactionChecker::pushReadTransaction(_transaction.session());
}
ReadTransaction::~ReadTransaction()
{
TransactionChecker::popReadTransaction(_transaction.session());
}
Session::Session(Db& db)
: _db{ db }
{
@@ -71,36 +95,14 @@ namespace Database
_session.mapClass<User>("user");
}
UniqueTransaction::UniqueTransaction(RecursiveSharedMutex& mutex, Wt::Dbo::Session& session)
: _lock{ mutex },
_transaction{ session }
WriteTransaction Session::createWriteTransaction()
{
return WriteTransaction{ _db.getMutex(), _session };
}
SharedTransaction::SharedTransaction(RecursiveSharedMutex& mutex, Wt::Dbo::Session& session)
: _lock{ mutex },
_transaction{ session }
ReadTransaction Session::createReadTransaction()
{
}
void Session::checkUniqueLocked()
{
assert(_db.getMutex().isUniqueLocked());
}
void Session::checkSharedLocked()
{
assert(_db.getMutex().isSharedLocked());
}
UniqueTransaction Session::createUniqueTransaction()
{
return UniqueTransaction{ _db.getMutex(), _session };
}
SharedTransaction Session::createSharedTransaction()
{
return SharedTransaction{ _db.getMutex(), _session };
return ReadTransaction{ _session };
}
void Session::prepareTables()
@@ -127,7 +129,7 @@ namespace Database
// Indexes
{
auto uniqueTransaction{ createUniqueTransaction() };
auto transaction{ createWriteTransaction() };
_session.execute("CREATE INDEX IF NOT EXISTS artist_name_idx ON artist(name)");
_session.execute("CREATE INDEX IF NOT EXISTS artist_sort_name_nocase_idx ON artist(sort_name COLLATE NOCASE)");
_session.execute("CREATE INDEX IF NOT EXISTS artist_mbid_idx ON artist(mbid)");
@@ -172,7 +174,7 @@ namespace Database
// Initial settings tables
{
auto uniqueTransaction{ createUniqueTransaction() };
auto uniqueTransaction{ createWriteTransaction() };
ScanSettings::init(*this);
}
@@ -182,7 +184,7 @@ namespace Database
{
LMS_LOG(DB, INFO) << "Analyzing database...";
{
auto uniqueTransaction{ createUniqueTransaction() };
auto transaction{ createWriteTransaction() };
_session.execute("ANALYZE");
}
LMS_LOG(DB, INFO) << "Database Analyze complete";
@@ -192,7 +194,7 @@ namespace Database
{
LMS_LOG(DB, INFO) << "Optimizing database...";
{
auto uniqueTransaction{ createUniqueTransaction() };
auto transaction{ createWriteTransaction() };
_session.execute("PRAGMA optimize");
}
LMS_LOG(DB, INFO) << "Database optimizing complete";