mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 23:09:52 +02:00
Add backup status getters
This commit is contained in:
parent
a7ca539899
commit
b76e1b9750
4 changed files with 66 additions and 24 deletions
|
@ -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();
|
||||||
});
|
});
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue