Add backup status getters

This commit is contained in:
Atlante45 2018-02-15 15:46:35 -08:00
parent a7ca539899
commit b76e1b9750
4 changed files with 66 additions and 24 deletions

View file

@ -111,6 +111,42 @@ void AssetsBackupHandler::checkForAssetsToDelete() {
} }
} }
std::pair<bool, float> AssetsBackupHandler::isAvailable(QString filePath) {
auto it = find_if(begin(_backups), end(_backups), [&](const std::vector<AssetServerBackup>::value_type& value) {
return value.filePath == filePath;
});
if (it == end(_backups)) {
return { true, 1.0f };
}
float progress = (float)it->mappings.size();
for (const auto& mapping : it->mappings) {
if (_assetsLeftToRequest.find(mapping.second) != end(_assetsLeftToRequest)) {
progress -= 1.0f;
}
}
progress /= (float)it->mappings.size();
return { false, progress };
}
std::pair<bool, float> AssetsBackupHandler::getRecoveryStatus() {
if (_assetsLeftToUpload.empty() &&
_mappingsLeftToSet.empty() &&
_mappingsLeftToDelete.empty() &&
_mappingRequestsInFlight == 0) {
return { false, 1.0f };
}
float progress = (float)_numRestoreOperations;
progress -= (float)_assetsLeftToUpload.size();
progress -= (float)_mappingRequestsInFlight;
progress /= (float)_numRestoreOperations;
return { true, progress };
}
void AssetsBackupHandler::loadBackup(QuaZip& zip) { void AssetsBackupHandler::loadBackup(QuaZip& zip) {
Q_ASSERT(QThread::currentThread() == thread()); Q_ASSERT(QThread::currentThread() == thread());
@ -451,6 +487,11 @@ void AssetsBackupHandler::computeServerStateDifference(const AssetUtils::Mapping
} }
} }
_numRestoreOperations = _assetsLeftToUpload.size() + _mappingsLeftToSet.size();
if (!_mappingsLeftToDelete.empty()) {
++_numRestoreOperations;
}
qCDebug(asset_backup) << "Mappings to set:" << _mappingsLeftToSet.size(); qCDebug(asset_backup) << "Mappings to set:" << _mappingsLeftToSet.size();
qCDebug(asset_backup) << "Mappings to del:" << _mappingsLeftToDelete.size(); qCDebug(asset_backup) << "Mappings to del:" << _mappingsLeftToDelete.size();
qCDebug(asset_backup) << "Assets to upload:" << _assetsLeftToUpload.size(); qCDebug(asset_backup) << "Assets to upload:" << _assetsLeftToUpload.size();
@ -461,8 +502,6 @@ void AssetsBackupHandler::restoreAllAssets() {
} }
void AssetsBackupHandler::restoreNextAsset() { void AssetsBackupHandler::restoreNextAsset() {
startOperation();
if (_assetsLeftToUpload.empty()) { if (_assetsLeftToUpload.empty()) {
updateMappings(); updateMappings();
return; return;
@ -500,9 +539,7 @@ void AssetsBackupHandler::updateMappings() {
qCCritical(asset_backup) << " Error:" << request->getErrorString(); qCCritical(asset_backup) << " Error:" << request->getErrorString();
} }
if (--_mappingRequestsInFlight == 0) { --_mappingRequestsInFlight;
stopOperation();
}
request->deleteLater(); request->deleteLater();
}); });
@ -519,9 +556,7 @@ void AssetsBackupHandler::updateMappings() {
qCCritical(asset_backup) << " Error:" << request->getErrorString(); qCCritical(asset_backup) << " Error:" << request->getErrorString();
} }
if (--_mappingRequestsInFlight == 0) { --_mappingRequestsInFlight;
stopOperation();
}
request->deleteLater(); request->deleteLater();
}); });

View file

@ -31,13 +31,16 @@ class AssetsBackupHandler : public QObject, public BackupHandlerInterface {
public: public:
AssetsBackupHandler(const QString& backupDirectory); AssetsBackupHandler(const QString& backupDirectory);
void loadBackup(QuaZip& zip); std::pair<bool, float> isAvailable(QString filePath) override;
void createBackup(QuaZip& zip); std::pair<bool, float> getRecoveryStatus() override;
void recoverBackup(QuaZip& zip);
void deleteBackup(QuaZip& zip);
void consolidateBackup(QuaZip& zip);
bool operationInProgress() const { return _operationInProgress; } void loadBackup(QuaZip& zip) override;
void createBackup(QuaZip& zip) override;
void recoverBackup(QuaZip& zip) override;
void deleteBackup(QuaZip& zip) override;
void consolidateBackup(QuaZip& zip) override;
bool operationInProgress() { return getRecoveryStatus().first; }
private: private:
void setupRefreshTimer(); void setupRefreshTimer();
@ -48,9 +51,6 @@ private:
void checkForMissingAssets(); void checkForMissingAssets();
void checkForAssetsToDelete(); void checkForAssetsToDelete();
void startOperation() { _operationInProgress = true; }
void stopOperation() { _operationInProgress = false; }
void downloadMissingFiles(const AssetUtils::Mappings& mappings); void downloadMissingFiles(const AssetUtils::Mappings& mappings);
void downloadNextMissingFile(); void downloadNextMissingFile();
bool writeAssetFile(const AssetUtils::AssetHash& hash, const QByteArray& data); bool writeAssetFile(const AssetUtils::AssetHash& hash, const QByteArray& data);
@ -73,8 +73,6 @@ private:
bool corruptedBackup; bool corruptedBackup;
}; };
bool _operationInProgress { false };
// Internal storage for backups on disk // Internal storage for backups on disk
bool _allBackupsLoadedSuccessfully { false }; bool _allBackupsLoadedSuccessfully { false };
std::vector<AssetServerBackup> _backups; std::vector<AssetServerBackup> _backups;
@ -89,6 +87,7 @@ private:
std::vector<std::pair<AssetUtils::AssetPath, AssetUtils::AssetHash>> _mappingsLeftToSet; std::vector<std::pair<AssetUtils::AssetPath, AssetUtils::AssetHash>> _mappingsLeftToSet;
AssetUtils::AssetPathList _mappingsLeftToDelete; AssetUtils::AssetPathList _mappingsLeftToDelete;
int _mappingRequestsInFlight { 0 }; int _mappingRequestsInFlight { 0 };
int _numRestoreOperations { 0 }; // Used to compute a restore progress.
}; };
#endif /* hifi_AssetsBackupHandler_h */ #endif /* hifi_AssetsBackupHandler_h */

View file

@ -20,6 +20,11 @@ class BackupHandlerInterface {
public: public:
virtual ~BackupHandlerInterface() = default; virtual ~BackupHandlerInterface() = default;
virtual std::pair<bool, float> isAvailable(QString filePath) = 0;
// Returns whether a recovery is ongoing and a progress between 0 and 1 if one is.
virtual std::pair<bool, float> getRecoveryStatus() = 0;
virtual void loadBackup(QuaZip& zip) = 0; virtual void loadBackup(QuaZip& zip) = 0;
virtual void createBackup(QuaZip& zip) = 0; virtual void createBackup(QuaZip& zip) = 0;
virtual void recoverBackup(QuaZip& zip) = 0; virtual void recoverBackup(QuaZip& zip) = 0;

View file

@ -20,19 +20,22 @@ class EntitiesBackupHandler : public BackupHandlerInterface {
public: public:
EntitiesBackupHandler(QString entitiesFilePath, QString entitiesReplacementFilePath); EntitiesBackupHandler(QString entitiesFilePath, QString entitiesReplacementFilePath);
void loadBackup(QuaZip& zip) {} std::pair<bool, float> isAvailable(QString filePath) override { return { true, 1.0f }; }
std::pair<bool, float> getRecoveryStatus() override { return { false, 1.0f }; }
void loadBackup(QuaZip& zip) override {}
// Create a skeleton backup // Create a skeleton backup
void createBackup(QuaZip& zip); void createBackup(QuaZip& zip) override;
// Recover from a full backup // Recover from a full backup
void recoverBackup(QuaZip& zip); void recoverBackup(QuaZip& zip) override;
// Delete a skeleton backup // Delete a skeleton backup
void deleteBackup(QuaZip& zip) {} void deleteBackup(QuaZip& zip) override {}
// Create a full backup // Create a full backup
void consolidateBackup(QuaZip& zip) {} void consolidateBackup(QuaZip& zip) override {}
private: private:
QString _entitiesFilePath; QString _entitiesFilePath;