From 59c13f3c38bf67661a6ec576e1dbb3fac92c2adc Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 14 Nov 2014 16:03:43 -0800 Subject: [PATCH 1/4] coding standard cleanup, fix warning --- interface/src/ui/overlays/Overlays.h | 3 ++- libraries/octree/src/OctreeHeadlessViewer.h | 3 ++- libraries/octree/src/OctreeRenderer.h | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.h b/interface/src/ui/overlays/Overlays.h index 295412cdbd..2cd80041cd 100644 --- a/interface/src/ui/overlays/Overlays.h +++ b/interface/src/ui/overlays/Overlays.h @@ -51,7 +51,8 @@ public: ~Overlays(); void init(QGLWidget* parent); void update(float deltatime); - void render3D(RenderArgs::RenderMode renderMode = RenderArgs::DEFAULT_RENDER_MODE, RenderArgs::RenderSide renderSide = RenderArgs::MONO); + void render3D(RenderArgs::RenderMode renderMode = RenderArgs::DEFAULT_RENDER_MODE, + RenderArgs::RenderSide renderSide = RenderArgs::MONO); void render2D(); public slots: diff --git a/libraries/octree/src/OctreeHeadlessViewer.h b/libraries/octree/src/OctreeHeadlessViewer.h index 03b8a204e0..9a6a5c7102 100644 --- a/libraries/octree/src/OctreeHeadlessViewer.h +++ b/libraries/octree/src/OctreeHeadlessViewer.h @@ -33,7 +33,8 @@ public: virtual void renderElement(OctreeElement* element, RenderArgs* args) { /* swallow these */ } virtual void init(); - virtual void render(RenderArgs::RenderMode renderMode = RenderArgs::DEFAULT_RENDER_MODE) { /* swallow these */ } + virtual void render(RenderArgs::RenderMode renderMode = RenderArgs::DEFAULT_RENDER_MODE, + RenderArgs::RenderSide renderSide = RenderArgs::MONO) { /* swallow these */ } void setJurisdictionListener(JurisdictionListener* jurisdictionListener) { _jurisdictionListener = jurisdictionListener; } diff --git a/libraries/octree/src/OctreeRenderer.h b/libraries/octree/src/OctreeRenderer.h index e8612b4cb6..2999f34fb6 100644 --- a/libraries/octree/src/OctreeRenderer.h +++ b/libraries/octree/src/OctreeRenderer.h @@ -52,7 +52,8 @@ public: virtual void init(); /// render the content of the octree - virtual void render(RenderArgs::RenderMode renderMode = RenderArgs::DEFAULT_RENDER_MODE, RenderArgs::RenderSide renderSide = RenderArgs::MONO); + virtual void render(RenderArgs::RenderMode renderMode = RenderArgs::DEFAULT_RENDER_MODE, + RenderArgs::RenderSide renderSide = RenderArgs::MONO); ViewFrustum* getViewFrustum() const { return _viewFrustum; } void setViewFrustum(ViewFrustum* viewFrustum) { _viewFrustum = viewFrustum; } From b511f868d522e9f86cbbbdea38ebda83e756b0dd Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Sat, 15 Nov 2014 20:24:00 -0800 Subject: [PATCH 2/4] fix warnings in overlays --- interface/src/ui/overlays/BillboardOverlay.cpp | 12 +++++++----- interface/src/ui/overlays/ImageOverlay.cpp | 11 ++++++----- interface/src/ui/overlays/ModelOverlay.cpp | 6 +++--- interface/src/ui/overlays/Overlay.cpp | 18 ++++++++++-------- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/interface/src/ui/overlays/BillboardOverlay.cpp b/interface/src/ui/overlays/BillboardOverlay.cpp index dee5eceab7..5fbad7839a 100644 --- a/interface/src/ui/overlays/BillboardOverlay.cpp +++ b/interface/src/ui/overlays/BillboardOverlay.cpp @@ -26,12 +26,14 @@ BillboardOverlay::BillboardOverlay() : BillboardOverlay::BillboardOverlay(const BillboardOverlay* billboardOverlay) : Base3DOverlay(billboardOverlay), - _newTextureNeeded(true), - _scale(billboardOverlay->_scale), - _isFacingAvatar(billboardOverlay->_isFacingAvatar), - _fromImage(billboardOverlay->_fromImage), _url(billboardOverlay->_url), - _billboard(billboardOverlay->_billboard) + _billboard(billboardOverlay->_billboard), + _size(), + _billboardTexture(), + _newTextureNeeded(true), + _fromImage(billboardOverlay->_fromImage), + _scale(billboardOverlay->_scale), + _isFacingAvatar(billboardOverlay->_isFacingAvatar) { } diff --git a/interface/src/ui/overlays/ImageOverlay.cpp b/interface/src/ui/overlays/ImageOverlay.cpp index fad19be292..f903dfe19c 100644 --- a/interface/src/ui/overlays/ImageOverlay.cpp +++ b/interface/src/ui/overlays/ImageOverlay.cpp @@ -29,12 +29,13 @@ ImageOverlay::ImageOverlay() : ImageOverlay::ImageOverlay(const ImageOverlay* imageOverlay) : Overlay2D(imageOverlay), - _textureID(0), - _textureBound(false), - _wantClipFromImage(false), - _renderImage(imageOverlay->_renderImage), _imageURL(imageOverlay->_imageURL), - _textureImage(imageOverlay->_textureImage) + _textureImage(imageOverlay->_textureImage), + _textureID(0), + _fromImage(), + _renderImage(imageOverlay->_renderImage), + _textureBound(false), + _wantClipFromImage(false) { } diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index 3594d7e828..60049e0b3b 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -26,10 +26,10 @@ ModelOverlay::ModelOverlay(const ModelOverlay* modelOverlay) : Base3DOverlay(modelOverlay), _model(), _modelTextures(QVariantMap()), - _scale(modelOverlay->_scale), - _updateModel(false), _url(modelOverlay->_url), - _rotation(modelOverlay->_rotation) + _rotation(modelOverlay->_rotation), + _scale(modelOverlay->_scale), + _updateModel(false) { _model.init(); if (_url.isValid()) { diff --git a/interface/src/ui/overlays/Overlay.cpp b/interface/src/ui/overlays/Overlay.cpp index 549152ded0..fd7aaca717 100644 --- a/interface/src/ui/overlays/Overlay.cpp +++ b/interface/src/ui/overlays/Overlay.cpp @@ -41,20 +41,22 @@ Overlay::Overlay() : Overlay::Overlay(const Overlay* overlay) : _parent(NULL), + _isLoaded(overlay->_isLoaded), _alpha(overlay->_alpha), - _lastPulseUpdate(usecTimestampNow()), - _alphaPulse(overlay->_alphaPulse), - _anchor(overlay->_anchor), - _color(overlay->_color), - _colorPulse(overlay->_colorPulse), _glowLevel(overlay->_glowLevel), - _glowLevelPulse(overlay->_glowLevelPulse), - _pulseDirection(overlay->_pulseDirection), + _pulse(overlay->_pulse), _pulseMax(overlay->_pulseMax), _pulseMin(overlay->_pulseMin), _pulsePeriod(overlay->_pulsePeriod), + _pulseDirection(overlay->_pulseDirection), + _lastPulseUpdate(usecTimestampNow()), + _glowLevelPulse(overlay->_glowLevelPulse), + _alphaPulse(overlay->_alphaPulse), + _colorPulse(overlay->_colorPulse), + _color(overlay->_color), _visible(overlay->_visible), - _isLoaded(overlay->_isLoaded) + _anchor(overlay->_anchor), + _scriptEngine(NULL) { } From f44513ebe7df295587867a0ab9f7bf0ac31b247f Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Sat, 15 Nov 2014 22:55:12 -0800 Subject: [PATCH 3/4] added support for rolling version numbers in backups --- assignment-client/src/octree/OctreeServer.cpp | 6 +- assignment-client/src/octree/OctreeServer.h | 1 + .../resources/describe-settings.json | 14 ++++- libraries/octree/src/OctreePersistThread.cpp | 58 +++++++++++++++++-- libraries/octree/src/OctreePersistThread.h | 6 +- 5 files changed, 74 insertions(+), 11 deletions(-) diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index f78a9a2b30..35b706d5f2 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -1047,6 +1047,10 @@ void OctreeServer::readConfiguration() { _backupInterval = OctreePersistThread::DEFAULT_BACKUP_INTERVAL; readOptionInt(QString("backupInterval"), settingsSectionObject, _backupInterval); qDebug() << "backupInterval=" << _backupInterval; + + _maxBackupVersions = OctreePersistThread::DEFAULT_MAX_BACKUP_VERSIONS; + readOptionInt(QString("maxBackupVersions"), settingsSectionObject, _maxBackupVersions); + qDebug() << "maxBackupVersions=" << _maxBackupVersions; } } else { @@ -1133,7 +1137,7 @@ void OctreeServer::run() { // now set up PersistThread _persistThread = new OctreePersistThread(_tree, _persistFilename, _persistInterval, - _wantBackup, _backupInterval, _backupExtensionFormat); + _wantBackup, _backupInterval, _backupExtensionFormat, _maxBackupVersions); if (_persistThread) { _persistThread->initialize(true); } diff --git a/assignment-client/src/octree/OctreeServer.h b/assignment-client/src/octree/OctreeServer.h index 8a91b94da0..b2a452ae52 100644 --- a/assignment-client/src/octree/OctreeServer.h +++ b/assignment-client/src/octree/OctreeServer.h @@ -172,6 +172,7 @@ protected: bool _wantBackup; QString _backupExtensionFormat; int _backupInterval; + int _maxBackupVersions; static OctreeServer* _instance; diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index 04c48e460e..d698fc3454 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -302,9 +302,9 @@ { "name": "backupExtensionFormat", "label": "Backup File Extension Format:", - "help": "Format used to create the extension for the backup of your persisted entities.", - "placeholder": ".backup.%Y-%m-%d.%H:%M:%S.%z", - "default": ".backup.%Y-%m-%d.%H:%M:%S.%z", + "help": "Format used to create the extension for the backup of your persisted entities. Use a format with %N to get rolling. Or use date formatting like %Y-%m-%d.%H:%M:%S.%z", + "placeholder": ".backup.%N", + "default": ".backup.%N", "advanced": true }, { @@ -315,6 +315,14 @@ "default": "1800000", "advanced": true }, + { + "name": "maxBackupVersions", + "label": "Max Rolled Backup Versions", + "help": "If your backup extension format uses 'rolling', how many versions do you want us to keep?", + "placeholder": "5", + "default": "5", + "advanced": true + }, { "name": "NoBackup", "type": "checkbox", diff --git a/libraries/octree/src/OctreePersistThread.cpp b/libraries/octree/src/OctreePersistThread.cpp index f74ddfa5f0..53de80660c 100644 --- a/libraries/octree/src/OctreePersistThread.cpp +++ b/libraries/octree/src/OctreePersistThread.cpp @@ -12,21 +12,26 @@ #include #include +#include + #include #include #include "OctreePersistThread.h" const int OctreePersistThread::DEFAULT_PERSIST_INTERVAL = 1000 * 30; // every 30 seconds -const int OctreePersistThread::DEFAULT_BACKUP_INTERVAL = 1000 * 60 * 30; // every 30 minutes -const QString OctreePersistThread::DEFAULT_BACKUP_EXTENSION_FORMAT(".backup.%Y-%m-%d.%H:%M:%S.%z"); +const int OctreePersistThread::DEFAULT_BACKUP_INTERVAL = 1000 * 60 * 1; // 30; // every 30 minutes +const QString OctreePersistThread::DEFAULT_BACKUP_EXTENSION_FORMAT(".backup.%N"); +const int OctreePersistThread::DEFAULT_MAX_BACKUP_VERSIONS = 5; OctreePersistThread::OctreePersistThread(Octree* tree, const QString& filename, int persistInterval, - bool wantBackup, int backupInterval, const QString& backupExtensionFormat) : + bool wantBackup, int backupInterval, const QString& backupExtensionFormat, + int maxBackupVersions) : _tree(tree), _filename(filename), _backupExtensionFormat(backupExtensionFormat), + _maxBackupVersions(maxBackupVersions), _persistInterval(persistInterval), _backupInterval(backupInterval), _initialLoadComplete(false), @@ -131,6 +136,37 @@ void OctreePersistThread::persist() { } } +void OctreePersistThread::rollOldBackupVersions() { + if (!_backupExtensionFormat.contains("%N")) { + return; // this backup extension format doesn't support rolling + } + + qDebug() << "Rolling old backup versions..."; + for(int n = _maxBackupVersions - 1; n > 0; n--) { + QString backupExtensionN = _backupExtensionFormat; + QString backupExtensionNplusOne = _backupExtensionFormat; + backupExtensionN.replace(QString("%N"), QString::number(n)); + backupExtensionNplusOne.replace(QString("%N"), QString::number(n+1)); + + QString backupFilenameN = _filename + backupExtensionN; + QString backupFilenameNplusOne = _filename + backupExtensionNplusOne; + + QFile backupFileN(backupFilenameN); + + if (backupFileN.exists()) { + qDebug() << "rolling backup file " << backupFilenameN << "to" << backupFilenameNplusOne << "..."; + int result = rename(qPrintable(backupFilenameN), qPrintable(backupFilenameNplusOne)); + if (result == 0) { + qDebug() << "DONE rolling backup file " << backupFilenameN << "to" << backupFilenameNplusOne << "..."; + } else { + qDebug() << "ERROR in rolling backup file " << backupFilenameN << "to" << backupFilenameNplusOne << "..."; + } + } + } + qDebug() << "Done rolling old backup versions..."; +} + + void OctreePersistThread::backup() { if (_wantBackup) { quint64 now = usecTimestampNow(); @@ -141,10 +177,20 @@ void OctreePersistThread::backup() { if (sinceLastBackup > intervalToBackup) { struct tm* localTime = localtime(&_lastPersistTime); - char backupExtension[256]; - strftime(backupExtension, sizeof(backupExtension), qPrintable(_backupExtensionFormat), localTime); + QString backupFileName; + + // check to see if they asked for version rolling format + if (_backupExtensionFormat.contains("%N")) { + rollOldBackupVersions(); // rename all the old backup files accordingly + QString backupExtension = _backupExtensionFormat; + backupExtension.replace(QString("%N"), QString("1")); + backupFileName = _filename + backupExtension; + } else { + char backupExtension[256]; + strftime(backupExtension, sizeof(backupExtension), qPrintable(_backupExtensionFormat), localTime); + backupFileName = _filename + backupExtension; + } - QString backupFileName = _filename + backupExtension; qDebug() << "backing up persist file " << _filename << "to" << backupFileName << "..."; int result = rename(qPrintable(_filename), qPrintable(backupFileName)); diff --git a/libraries/octree/src/OctreePersistThread.h b/libraries/octree/src/OctreePersistThread.h index 06b97b2dcb..5aac67844f 100644 --- a/libraries/octree/src/OctreePersistThread.h +++ b/libraries/octree/src/OctreePersistThread.h @@ -25,10 +25,12 @@ public: static const int DEFAULT_PERSIST_INTERVAL; static const int DEFAULT_BACKUP_INTERVAL; static const QString DEFAULT_BACKUP_EXTENSION_FORMAT; + static const int DEFAULT_MAX_BACKUP_VERSIONS; OctreePersistThread(Octree* tree, const QString& filename, int persistInterval = DEFAULT_PERSIST_INTERVAL, bool wantBackup = false, int backupInterval = DEFAULT_BACKUP_INTERVAL, - const QString& backupExtensionFormat = DEFAULT_BACKUP_EXTENSION_FORMAT); + const QString& backupExtensionFormat = DEFAULT_BACKUP_EXTENSION_FORMAT, + int maxBackupVersions = DEFAULT_MAX_BACKUP_VERSIONS); bool isInitialLoadComplete() const { return _initialLoadComplete; } quint64 getLoadElapsedTime() const { return _loadTimeUSecs; } @@ -44,10 +46,12 @@ protected: void persist(); void backup(); + void rollOldBackupVersions(); private: Octree* _tree; QString _filename; QString _backupExtensionFormat; + int _maxBackupVersions; int _persistInterval; int _backupInterval; bool _initialLoadComplete; From ec64bef951ca3a93bc502e70824ed26642235dac Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 17 Nov 2014 11:18:38 -0800 Subject: [PATCH 4/4] revert debugging change --- libraries/octree/src/OctreePersistThread.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/octree/src/OctreePersistThread.cpp b/libraries/octree/src/OctreePersistThread.cpp index 53de80660c..2684b76d2f 100644 --- a/libraries/octree/src/OctreePersistThread.cpp +++ b/libraries/octree/src/OctreePersistThread.cpp @@ -20,7 +20,7 @@ #include "OctreePersistThread.h" const int OctreePersistThread::DEFAULT_PERSIST_INTERVAL = 1000 * 30; // every 30 seconds -const int OctreePersistThread::DEFAULT_BACKUP_INTERVAL = 1000 * 60 * 1; // 30; // every 30 minutes +const int OctreePersistThread::DEFAULT_BACKUP_INTERVAL = 1000 * 60 * 30; // every 30 minutes const QString OctreePersistThread::DEFAULT_BACKUP_EXTENSION_FORMAT(".backup.%N"); const int OctreePersistThread::DEFAULT_MAX_BACKUP_VERSIONS = 5;