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
@@ -35,7 +35,7 @@ namespace Scanner
return;
Session& session {_db.getTLSSession()};
auto transaction {session.createSharedTransaction()};
auto transaction {session.createReadTransaction()};
const RangeResults<TrackId> tracks = Track::findIdsTrackMBIDDuplicates(session);
for (const TrackId trackId : tracks.results)
@@ -36,7 +36,7 @@ namespace Scanner
Session& dbSession{ _db.getTLSSession() };
const std::size_t clusterCount{ [&] {
auto transaction{ dbSession.createSharedTransaction() };
auto transaction{ dbSession.createReadTransaction() };
return Cluster::getCount(dbSession);
}() };
@@ -50,7 +50,7 @@ namespace Scanner
params.setRange(range);
{
auto transaction{ dbSession.createSharedTransaction() };
auto transaction{ dbSession.createReadTransaction() };
return std::move(Cluster::findIds(dbSession, params).results);
}
}() };
@@ -61,14 +61,14 @@ namespace Scanner
std::size_t releaseCount;
{
auto transaction{ dbSession.createSharedTransaction() };
auto transaction{ dbSession.createReadTransaction() };
trackCount = Cluster::computeTrackCount(dbSession, clusterId);
releaseCount = Cluster::computeReleaseCount(dbSession, clusterId);
}
{
auto transaction{ dbSession.createUniqueTransaction() };
auto transaction{ dbSession.createWriteTransaction() };
auto cluster{ Cluster::find(dbSession, clusterId) };
cluster.modify()->setTrackCount(trackCount);
@@ -52,7 +52,7 @@ namespace Scanner
std::size_t trackCount{};
{
auto transaction{ session.createSharedTransaction() };
auto transaction{ session.createReadTransaction() };
trackCount = Track::getCount(session);
}
LMS_LOG(DBUPDATER, DEBUG) << trackCount << " tracks to be checked...";
@@ -68,7 +68,7 @@ namespace Scanner
tracksToRemove.clear();
{
auto transaction{ session.createSharedTransaction() };
auto transaction{ session.createReadTransaction() };
trackPaths = Track::findPaths(session, Range{ i, batchSize });
}
@@ -85,7 +85,7 @@ namespace Scanner
if (!tracksToRemove.empty())
{
auto transaction{ session.createSharedTransaction() };
auto transaction{ session.createWriteTransaction() };
for (const TrackId trackId : tracksToRemove)
{
@@ -113,7 +113,7 @@ namespace Scanner
LMS_LOG(DBUPDATER, DEBUG) << "Checking orphan clusters...";
Session& session{ _db.getTLSSession() };
auto transaction{ session.createUniqueTransaction() };
auto transaction{ session.createWriteTransaction() };
// Now process orphan Cluster (no track)
auto clusterIds{ Cluster::findOrphans(session) };
@@ -132,7 +132,7 @@ namespace Scanner
LMS_LOG(DBUPDATER, DEBUG) << "Checking orphan artists...";
Session& session{ _db.getTLSSession() };
auto transaction{ session.createUniqueTransaction() };
auto transaction{ session.createWriteTransaction() };
auto artistIds{ Artist::findOrphanIds(session) };
for (const ArtistId artistId : artistIds.results)
@@ -151,7 +151,7 @@ namespace Scanner
// TODO, by batch
Session& session{ _db.getTLSSession() };
auto transaction{ session.createUniqueTransaction() };
auto transaction{ session.createWriteTransaction() };
auto releases{ Release::findOrphanIds(session) };
for (const ReleaseId releaseId : releases.results)
@@ -337,7 +337,7 @@ namespace Scanner
{
// Skip file if last write is the same
Database::Session& dbSession{ _db.getTLSSession() };
auto transaction{ _db.getTLSSession().createSharedTransaction() };
auto transaction{ _db.getTLSSession().createReadTransaction() };
const Track::pointer track{ Track::findByPath(dbSession, file) };
@@ -359,7 +359,7 @@ namespace Scanner
stats.scans++;
Database::Session& dbSession{ _db.getTLSSession() };
auto uniqueTransaction{ dbSession.createUniqueTransaction() };
auto transaction{ dbSession.createWriteTransaction() };
Track::pointer track{ Track::findByPath(dbSession, file) };
@@ -345,7 +345,7 @@ namespace Scanner
newSettings.skipDuplicateMBID = Service<IConfig>::get()->getBool("scanner-skip-duplicate-mbid", false);
{
auto transaction{ _dbSession.createSharedTransaction() };
auto transaction{ _dbSession.createReadTransaction() };
const ScanSettings::pointer scanSettings{ ScanSettings::get(_dbSession) };