diff --git a/core/include/Data/IDataProvider.h b/core/include/Data/IDataProvider.h index e84b974..6ff3b18 100644 --- a/core/include/Data/IDataProvider.h +++ b/core/include/Data/IDataProvider.h @@ -55,11 +55,15 @@ signals: const SqpRange &dataRangeAcquired); /** - * @brief dataProvided send dataSeries under dateTime and that corresponds of the data - * identified by identifier - */ + * @brief dataProvidedProgress notify the progression of the data identifier by acqIdentifier + */ void dataProvidedProgress(QUuid acqIdentifier, double progress); + /** + * @brief dataProvidedFailed notify that data acquisition has failed + */ + void dataProvidedFailed(QUuid acqIdentifier); + /** * @brief requestConstructed send a request for the data identified by acqIdentifier diff --git a/core/include/Variable/VariableAcquisitionWorker.h b/core/include/Variable/VariableAcquisitionWorker.h index 25f7f0b..f5badbc 100644 --- a/core/include/Variable/VariableAcquisitionWorker.h +++ b/core/include/Variable/VariableAcquisitionWorker.h @@ -43,10 +43,15 @@ signals: void variableRequestInProgress(QUuid vIdentifier, double progress); + + void variableCanceledRequested(QUuid vIdentifier); + + public slots: void onVariableDataAcquired(QUuid acqIdentifier, std::shared_ptr dataSeries, SqpRange dataRangeAcquired); void onVariableRetrieveDataInProgress(QUuid acqIdentifier, double progress); + void onVariableAcquisitionFailed(QUuid acqIdentifier); private: void waitForFinish(); diff --git a/core/include/Variable/VariableController.h b/core/include/Variable/VariableController.h index 722afb7..b016617 100644 --- a/core/include/Variable/VariableController.h +++ b/core/include/Variable/VariableController.h @@ -106,6 +106,7 @@ public slots: /// Cancel the current request for the variable void onAbortProgressRequested(std::shared_ptr variable); + void onAbortAcquisitionRequested(QUuid vIdentifier); // synchronization group methods void onAddSynchronizationGroupId(QUuid synchronizationGroupId); diff --git a/core/src/Variable/VariableAcquisitionWorker.cpp b/core/src/Variable/VariableAcquisitionWorker.cpp index 24a88a7..5eac38c 100644 --- a/core/src/Variable/VariableAcquisitionWorker.cpp +++ b/core/src/Variable/VariableAcquisitionWorker.cpp @@ -67,6 +67,7 @@ QUuid VariableAcquisitionWorker::pushVariableRequest(QUuid varRequestId, QUuid v // Request creation auto acqRequest = AcquisitionRequest{}; + qCInfo(LOG_VariableAcquisitionWorker()) << tr("TpushVariableRequest ") << vIdentifier; acqRequest.m_VarRequestId = varRequestId; acqRequest.m_vIdentifier = vIdentifier; acqRequest.m_DataProviderParameters = parameters; @@ -157,7 +158,8 @@ void VariableAcquisitionWorker::onVariableRetrieveDataInProgress(QUuid acqIdenti auto finalProgression = currentAlreadyProgress + currentPartProgress; emit variableRequestInProgress(aIdToARit->second.m_vIdentifier, finalProgression); qCDebug(LOG_VariableAcquisitionWorker()) - << tr("TORM: onVariableRetrieveDataInProgress ") << aIdToARit->second.m_vIdentifier + << tr("TORM: onVariableRetrieveDataInProgress ") + << QThread::currentThread()->objectName() << aIdToARit->second.m_vIdentifier << currentPartSize << currentAlreadyProgress << currentPartProgress << finalProgression; if (finalProgression == 100.0) { emit variableRequestInProgress(aIdToARit->second.m_vIdentifier, 0.0); @@ -166,6 +168,26 @@ void VariableAcquisitionWorker::onVariableRetrieveDataInProgress(QUuid acqIdenti impl->unlock(); } +void VariableAcquisitionWorker::onVariableAcquisitionFailed(QUuid acqIdentifier) +{ + qCDebug(LOG_VariableAcquisitionWorker()) << tr("onVariableAcquisitionFailed") + << QThread::currentThread(); + impl->lockRead(); + auto it = impl->m_AcqIdentifierToAcqRequestMap.find(acqIdentifier); + if (it != impl->m_AcqIdentifierToAcqRequestMap.cend()) { + auto request = it->second; + impl->unlock(); + qCInfo(LOG_VariableAcquisitionWorker()) << tr("onVariableAcquisitionFailed") + << acqIdentifier << request.m_vIdentifier + << QThread::currentThread(); + emit variableCanceledRequested(request.m_vIdentifier); + } + else { + impl->unlock(); + // TODO log no acqIdentifier recognized + } +} + void VariableAcquisitionWorker::onVariableDataAcquired(QUuid acqIdentifier, std::shared_ptr dataSeries, SqpRange dataRangeAcquired) diff --git a/core/src/Variable/VariableController.cpp b/core/src/Variable/VariableController.cpp index b54e23a..07674c7 100644 --- a/core/src/Variable/VariableController.cpp +++ b/core/src/Variable/VariableController.cpp @@ -151,12 +151,17 @@ VariableController::VariableController(QObject *parent) connect(impl->m_VariableModel, &VariableModel::abortProgessRequested, this, &VariableController::onAbortProgressRequested); + connect(impl->m_VariableAcquisitionWorker.get(), + &VariableAcquisitionWorker::variableCanceledRequested, this, + &VariableController::onAbortAcquisitionRequested); + connect(impl->m_VariableAcquisitionWorker.get(), &VariableAcquisitionWorker::dataProvided, this, &VariableController::onDataProvided); connect(impl->m_VariableAcquisitionWorker.get(), &VariableAcquisitionWorker::variableRequestInProgress, this, &VariableController::onVariableRetrieveDataInProgress); + connect(&impl->m_VariableAcquisitionWorkerThread, &QThread::started, impl->m_VariableAcquisitionWorker.get(), &VariableAcquisitionWorker::initialize); connect(&impl->m_VariableAcquisitionWorkerThread, &QThread::finished, @@ -273,6 +278,7 @@ VariableController::createVariable(const QString &name, const QVariantHash &meta // Associate the provider impl->m_VariableToProviderMap[newVariable] = provider; + qCInfo(LOG_VariableController()) << "createVariable: " << identifier; impl->m_VariableToIdentifierMap[newVariable] = identifier; @@ -358,6 +364,20 @@ void VariableController::onAbortProgressRequested(std::shared_ptr vari } } +void VariableController::onAbortAcquisitionRequested(QUuid vIdentifier) +{ + qCDebug(LOG_VariableController()) << "TORM: variableController::onAbortAcquisitionRequested" + << QThread::currentThread()->objectName() << vIdentifier; + + if (auto var = impl->findVariable(vIdentifier)) { + this->onAbortProgressRequested(var); + } + else { + qCCritical(LOG_VariableController()) + << tr("Impossible to abort Acquisition Requestof a null variable"); + } +} + void VariableController::onAddSynchronizationGroupId(QUuid synchronizationGroupId) { qCDebug(LOG_VariableController()) << "TORM: VariableController::onAddSynchronizationGroupId" @@ -645,6 +665,9 @@ void VariableController::VariableControllerPrivate::registerProvider( connect(provider.get(), &IDataProvider::dataProvidedProgress, m_VariableAcquisitionWorker.get(), &VariableAcquisitionWorker::onVariableRetrieveDataInProgress); + connect(provider.get(), &IDataProvider::dataProvidedFailed, + m_VariableAcquisitionWorker.get(), + &VariableAcquisitionWorker::onVariableAcquisitionFailed); } else { qCDebug(LOG_VariableController()) << tr("Cannot register provider, it already exists "); @@ -715,12 +738,10 @@ QUuid VariableController::VariableControllerPrivate::acceptVariableRequest( << varRequestId; } - qCDebug(LOG_VariableController()) << tr("1: erase REQUEST in QUEUE ?") - << varRequestIdQueue.size(); varRequestIdQueue.pop_front(); - qCDebug(LOG_VariableController()) << tr("2: erase REQUEST in QUEUE ?") - << varRequestIdQueue.size(); if (varRequestIdQueue.empty()) { + qCDebug(LOG_VariableController()) + << tr("TORM Erase REQUEST because it has been accepted") << varId; m_VarIdToVarRequestIdQueueMap.erase(varId); } } diff --git a/plugins/amda/src/AmdaProvider.cpp b/plugins/amda/src/AmdaProvider.cpp index 8b99bbf..7f7e1cf 100644 --- a/plugins/amda/src/AmdaProvider.cpp +++ b/plugins/amda/src/AmdaProvider.cpp @@ -82,8 +82,8 @@ void AmdaProvider::requestDataLoading(QUuid acqIdentifier, const DataProviderPar const auto times = parameters.m_Times; const auto data = parameters.m_Data; for (const auto &dateTime : qAsConst(times)) { - qCInfo(LOG_AmdaProvider()) << tr("TORM AmdaProvider::requestDataLoading ") << acqIdentifier - << dateTime; + qCDebug(LOG_AmdaProvider()) << tr("TORM AmdaProvider::requestDataLoading ") << acqIdentifier + << dateTime; this->retrieveData(acqIdentifier, dateTime, data); @@ -125,8 +125,8 @@ void AmdaProvider::onReplyDownloadProgress(QUuid acqIdentifier, // This case can happened when a progression is send after the request has been // finished. // Generaly the case when aborting a request - qCWarning(LOG_AmdaProvider()) << tr("Can't retrieve Request in progress") - << acqIdentifier << networkRequest.get() << progress; + qCDebug(LOG_AmdaProvider()) << tr("Can't retrieve Request in progress") << acqIdentifier + << networkRequest.get() << progress; } // Compute the current final progress and notify it @@ -199,6 +199,7 @@ void AmdaProvider::retrieveData(QUuid token, const SqpRange &dateTime, const QVa } else { /// @todo ALX : debug + emit dataProvidedFailed(dataId); } } qCDebug(LOG_AmdaProvider()) << tr("acquisition requests erase because of finishing") @@ -207,6 +208,7 @@ void AmdaProvider::retrieveData(QUuid token, const SqpRange &dateTime, const QVa } else { qCCritical(LOG_AmdaProvider()) << tr("httpDownloadFinished ERROR"); + emit dataProvidedFailed(dataId); } }; @@ -228,12 +230,16 @@ void AmdaProvider::retrieveData(QUuid token, const SqpRange &dateTime, const QVa updateRequestProgress(dataId, request, 0.0); emit requestConstructed(request, dataId, httpDownloadFinished); } + else { + emit dataProvidedFailed(dataId); + } } else { qCDebug(LOG_AmdaProvider()) << tr("acquisition requests erase because of aborting") << dataId; qCCritical(LOG_AmdaProvider()) << tr("httpFinishedLambda ERROR"); m_AcqIdToRequestProgressMap.erase(dataId); + emit dataProvidedFailed(dataId); } };