wsd/DocumentBroker.cpp | 17 +++++++---------- wsd/DocumentBroker.hpp | 18 +++++++++--------- 2 files changed, 16 insertions(+), 19 deletions(-)
New commits: commit 28db46a59c1dd07ef1cbcc928f4de408e15bf0f3 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sun Jan 1 19:42:19 2017 -0500 wsd: always update the last save time to detect failures When saving we need to differentiate between no-op and failure. The lastSaveTime must always be updated when saving didn't fail (i.e. no modification or saved). Change-Id: I0e2455afac22c82f0b623f9441fbc0bca8a7cb83 Reviewed-on: https://gerrit.libreoffice.org/32629 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index dd15f06..a9a2dac 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -372,6 +372,7 @@ bool DocumentBroker::save(const std::string& sessionId, bool success, const std: if (!success && result == "unmodified") { LOG_DBG("Save skipped as document [" << _docKey << "] was not modified."); + _lastSaveTime = std::chrono::steady_clock::now(); _saveCV.notify_all(); return true; } @@ -395,6 +396,7 @@ bool DocumentBroker::save(const std::string& sessionId, bool success, const std: // Nothing to do. LOG_DBG("Skipping unnecessary saving to URI [" << uri << "] with docKey [" << _docKey << "]. File last modified " << _lastFileModifiedTime.elapsed() / 1000000 << " seconds ago."); + _lastSaveTime = std::chrono::steady_clock::now(); _saveCV.notify_all(); return true; } @@ -483,16 +485,11 @@ bool DocumentBroker::autoSave(const bool force, const size_t waitTimeoutMs, std: } else if (_isModified) { - // Find the most recent activity. - double inactivityTimeMs = std::numeric_limits<double>::max(); - for (const auto& sessionIt : _sessions) - { - inactivityTimeMs = std::min(sessionIt.second->getInactivityMS(), inactivityTimeMs); - } - - const auto timeSinceLastSaveMs = getTimeSinceLastSaveMs(); + const auto now = std::chrono::steady_clock::now(); + const auto inactivityTimeMs = std::chrono::duration_cast<std::chrono::milliseconds>(now - _lastActivityTime).count(); + const auto timeSinceLastSaveMs = std::chrono::duration_cast<std::chrono::milliseconds>(now - _lastSaveTime).count(); LOG_TRC("Time since last save of docKey [" << _docKey << "] is " << timeSinceLastSaveMs << - " ms and most recent activity was " << inactivityTimeMs << "ms ago."); + "ms and most recent activity was " << inactivityTimeMs << "ms ago."); // Either we've been idle long enough, or it's auto-save time. if (inactivityTimeMs >= IdleSaveDurationMs || @@ -1089,7 +1086,7 @@ void DocumentBroker::closeDocument(const std::string& reason) void DocumentBroker::updateLastActivityTime() { - _lastActivity = std::chrono::steady_clock::now(); + _lastActivityTime = std::chrono::steady_clock::now(); Admin::instance().updateLastActivityTime(_docKey); } diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp index 54eb3be..0c2457a 100644 --- a/wsd/DocumentBroker.hpp +++ b/wsd/DocumentBroker.hpp @@ -226,13 +226,6 @@ public: return _sessions.size(); } - /// @eturn the time in milliseconds since last save. - double getTimeSinceLastSaveMs() const - { - const auto duration = (std::chrono::steady_clock::now() - _lastSaveTime); - return std::chrono::duration_cast<std::chrono::milliseconds>(duration).count(); - } - std::string getJailRoot() const; /// Add a new session. Returns the new number of sessions. @@ -303,7 +296,7 @@ public: std::size_t getIdleTimeSecs() const { - const auto duration = (std::chrono::steady_clock::now() - _lastActivity); + const auto duration = (std::chrono::steady_clock::now() - _lastActivityTime); return std::chrono::duration_cast<std::chrono::seconds>(duration).count(); } @@ -326,8 +319,15 @@ private: Poco::URI _uriJailed; std::string _jailId; std::string _filename; + + /// The last time we tried saving, regardless of whether the + /// document was modified and saved or not. std::chrono::steady_clock::time_point _lastSaveTime; + + /// The document's last-modified time on storage. Poco::Timestamp _documentLastModifiedTime; + + /// The jailed file last-modified time. Poco::Timestamp _lastFileModifiedTime; std::map<std::string, std::shared_ptr<ClientSession> > _sessions; std::unique_ptr<StorageBase> _storage; @@ -350,7 +350,7 @@ private: int _debugRenderedTileCount; - std::chrono::steady_clock::time_point _lastActivity; + std::chrono::steady_clock::time_point _lastActivityTime; static constexpr auto IdleSaveDurationMs = 30 * 1000; static constexpr auto AutoSaveDurationMs = 300 * 1000; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits