summaryrefslogtreecommitdiffstats
path: root/src/analyzer/analyzerqueue.cpp
diff options
context:
space:
mode:
authorUwe Klotz <uwe_klotz@web.de>2017-06-10 09:21:00 +0200
committerUwe Klotz <uwe_klotz@web.de>2017-06-12 07:39:47 +0200
commit40ccb3dbee146d9750c1b20e82a0c9a2b5b93ac4 (patch)
tree97478a4e7ba06eb847acde95a5e2dafae1d74bec /src/analyzer/analyzerqueue.cpp
parent2e1d15d306cc39f3b9f0a9b60d4efd4a92fe4829 (diff)
Manage a pool of thread-local database connections
Diffstat (limited to 'src/analyzer/analyzerqueue.cpp')
-rw-r--r--src/analyzer/analyzerqueue.cpp37
1 files changed, 12 insertions, 25 deletions
diff --git a/src/analyzer/analyzerqueue.cpp b/src/analyzer/analyzerqueue.cpp
index 2d7dec724f..8e8011f3eb 100644
--- a/src/analyzer/analyzerqueue.cpp
+++ b/src/analyzer/analyzerqueue.cpp
@@ -37,21 +37,15 @@ const SINT kAnalysisSamplesPerBlock =
QAtomicInt instanceCounter(0);
-QAtomicInt dbIndex(0);
-
-QString nextDatabaseConnectioName() {
- const int idx = dbIndex.fetchAndAddAcquire(1);
- return QString("ANALYZER_QUEUE-%1").arg(QString::number(idx));
-}
-
} // anonymous namespace
AnalyzerQueue::AnalyzerQueue(
- UserSettingsPointer pConfig,
+ mixxx::DbConnectionPoolPtr pDbConnectionPool,
+ const UserSettingsPointer& pConfig,
Mode mode)
- : m_exit(false),
+ : m_pDbConnectionPool(std::move(pDbConnectionPool)),
+ m_exit(false),
m_aiCheckPriorities(false),
- m_repository(pConfig, nextDatabaseConnectioName()),
m_sampleBuffer(kAnalysisSamplesPerBlock),
m_queue_size(0) {
@@ -298,23 +292,20 @@ void AnalyzerQueue::run() {
kLogger.debug() << "Entering thread";
- if (!m_repository.openDatabaseConnection()) {
+ execThread();
+
+ kLogger.debug() << "Exiting thread";
+}
+
+void AnalyzerQueue::execThread() {
+ const mixxx::DbConnectionPool::ThreadLocalScope dbConnectionScope(m_pDbConnectionPool);
+ if (!dbConnectionScope) {
kLogger.warning()
<< "Failed to open database connection for analyzer queue";
kLogger.debug() << "Exiting thread";
return;
}
- // TODO(uklotzde): Remove after introducing connection pool
- QSqlDatabase database = m_repository.database();
- for (auto const& pAnalyzer: m_pAnalyzers) {
- AnalyzerWaveform* pWaveformAnalyzer = dynamic_cast<AnalyzerWaveform*>(pAnalyzer.get());
- if (pWaveformAnalyzer != nullptr) {
- pWaveformAnalyzer->initializeDatabase(database);
- break;
- }
- }
-
m_progressInfo.current_track.reset();
m_progressInfo.track_progress = 0;
m_progressInfo.queue_size = 0;
@@ -389,10 +380,6 @@ void AnalyzerQueue::run() {
emptyCheck();
}
emit(queueEmpty()); // emit in case of exit;
-
- m_repository.closeDatabaseConnection();
-
- kLogger.debug() << "Exiting thread";
}
void AnalyzerQueue::emptyCheck() {