[Libreoffice-commits] online.git: loolwsd/DocumentBroker.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Nov 7 06:36:22 UTC 2016
loolwsd/DocumentBroker.cpp | 131 +++++++++++++++++++++++----------------------
1 file changed, 69 insertions(+), 62 deletions(-)
New commits:
commit 4e13f1b37c94a4e39197ec45d1db30acdae904fa
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sun Nov 6 13:54:00 2016 -0500
loolwsd: cleanup document and storage loading in WSD
Change-Id: I4d6bdda131efb6270fbd5864034ac619cf86ef3d
Reviewed-on: https://gerrit.libreoffice.org/30637
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
index cf66a4a..1462d3c 100644
--- a/loolwsd/DocumentBroker.cpp
+++ b/loolwsd/DocumentBroker.cpp
@@ -163,6 +163,8 @@ DocumentBroker::~DocumentBroker()
bool DocumentBroker::load(const std::string& sessionId, const std::string& jailId)
{
+ LOG_INF("Loading [" << _docKey << "] for session [" << sessionId << "] and jail [" << jailId << "].");
+
{
bool result;
if (UnitWSD::get().filterLoad(sessionId, jailId, result))
@@ -172,6 +174,7 @@ bool DocumentBroker::load(const std::string& sessionId, const std::string& jailI
if (_markToDestroy)
{
// Tearing down.
+ LOG_WRN("Will not load document marked to destroy. DocKey: [" << _docKey << "].");
return false;
}
@@ -193,11 +196,12 @@ bool DocumentBroker::load(const std::string& sessionId, const std::string& jailI
// user/doc/jailId
const auto jailPath = Poco::Path(JAILED_DOCUMENT_ROOT, jailId);
std::string jailRoot = getJailRoot();
-
- LOG_INF("jailPath: " << jailPath.toString() << ", jailRoot: " << jailRoot);
-
if (LOOLWSD::NoCapsForKit)
+ {
jailRoot = jailPath.toString() + "/" + getJailRoot();
+ }
+
+ LOG_INF("jailPath: " << jailPath.toString() << ", jailRoot: " << jailRoot);
if (_storage == nullptr)
{
@@ -206,80 +210,83 @@ bool DocumentBroker::load(const std::string& sessionId, const std::string& jailI
// different query params like access token etc.)
LOG_DBG("Creating new storage instance for URI [" << uriPublic.toString() << "].");
_storage = StorageBase::create(uriPublic, jailRoot, jailPath.toString());
- }
-
- if (_storage)
- {
- // Call the storage specific file info functions
- std::string userid, username;
- std::chrono::duration<double> getInfoCallDuration;
- if (dynamic_cast<WopiStorage*>(_storage.get()) != nullptr)
+ if (_storage == nullptr)
{
- const WopiStorage::WOPIFileInfo wopifileinfo = static_cast<WopiStorage*>(_storage.get())->getWOPIFileInfo(uriPublic);
- userid = wopifileinfo._userid;
- username = wopifileinfo._username;
+ // We should get an exception, not null.
+ LOG_ERR("Failed to create Storage instance for [" << _docKey << "] in " << jailPath.toString());
+ return false;
+ }
+ }
- if (!wopifileinfo._userCanWrite)
- {
- LOG_DBG("Setting the session as readonly");
- it->second->setReadOnly();
- }
+ assert(_storage != nullptr);
- if (!wopifileinfo._postMessageOrigin.empty())
- {
- it->second->sendTextFrame("wopi: postmessageorigin " + wopifileinfo._postMessageOrigin);
- }
+ // Call the storage specific file info functions
+ std::string userid, username;
+ std::chrono::duration<double> getInfoCallDuration;
+ if (dynamic_cast<WopiStorage*>(_storage.get()) != nullptr)
+ {
+ const WopiStorage::WOPIFileInfo wopifileinfo = static_cast<WopiStorage*>(_storage.get())->getWOPIFileInfo(uriPublic);
+ userid = wopifileinfo._userid;
+ username = wopifileinfo._username;
- getInfoCallDuration = wopifileinfo._callDuration;
- }
- else if (dynamic_cast<LocalStorage*>(_storage.get()) != nullptr)
+ if (!wopifileinfo._userCanWrite)
{
- const LocalStorage::LocalFileInfo localfileinfo = static_cast<LocalStorage*>(_storage.get())->getLocalFileInfo(uriPublic);
- userid = localfileinfo._userid;
- username = localfileinfo._username;
+ LOG_DBG("Setting the session as readonly");
+ it->second->setReadOnly();
}
- LOG_DBG("Setting username [" << username << "] and userId [" << userid << "] for session [" << sessionId << "]");
- it->second->setUserId(userid);
- it->second->setUserName(username);
-
- // Get basic file information from the storage
- const auto fileInfo = _storage->getFileInfo();
- if (!fileInfo.isValid())
+ if (!wopifileinfo._postMessageOrigin.empty())
{
- LOG_ERR("Invalid fileinfo for URI [" << uriPublic.toString() << "].");
- return false;
+ it->second->sendTextFrame("wopi: postmessageorigin " + wopifileinfo._postMessageOrigin);
}
- // Lets load the document now
- const bool loaded = _storage->isLoaded();
- if (!loaded)
- {
- const auto localPath = _storage->loadStorageFileToLocal();
- _uriJailed = Poco::URI(Poco::URI("file://"), localPath);
- _filename = fileInfo._filename;
+ getInfoCallDuration = wopifileinfo._callDuration;
+ }
+ else if (dynamic_cast<LocalStorage*>(_storage.get()) != nullptr)
+ {
+ const LocalStorage::LocalFileInfo localfileinfo = static_cast<LocalStorage*>(_storage.get())->getLocalFileInfo(uriPublic);
+ userid = localfileinfo._userid;
+ username = localfileinfo._username;
+ }
- // Use the local temp file's timestamp.
- _lastFileModifiedTime = Poco::File(_storage->getLocalRootPath()).getLastModified();
- _tileCache.reset(new TileCache(_uriPublic.toString(), _lastFileModifiedTime, _cacheRoot));
- }
+ LOG_DBG("Setting username [" << username << "] and userId [" << userid << "] for session [" << sessionId << "]");
+ it->second->setUserId(userid);
+ it->second->setUserName(username);
- // Since document has been loaded, send the stats if its WOPI
- if (dynamic_cast<WopiStorage*>(_storage.get()) != nullptr)
- {
- // Get the time taken to load the file from storage
- auto callDuration = static_cast<WopiStorage*>(_storage.get())->getWopiLoadDuration();
- // Add the time taken to check file info
- callDuration += getInfoCallDuration;
- const std::string msg = "stats: wopiloadduration " + std::to_string(callDuration.count());
- LOG_TRC("Sending to Client [" << msg << "].");
- it->second->sendTextFrame(msg);
- }
+ // Get basic file information from the storage
+ const auto fileInfo = _storage->getFileInfo();
+ if (!fileInfo.isValid())
+ {
+ LOG_ERR("Invalid fileinfo for URI [" << uriPublic.toString() << "].");
+ return false;
+ }
- return true;
+ // Lets load the document now
+ const bool loaded = _storage->isLoaded();
+ if (!loaded)
+ {
+ const auto localPath = _storage->loadStorageFileToLocal();
+ _uriJailed = Poco::URI(Poco::URI("file://"), localPath);
+ _filename = fileInfo._filename;
+
+ // Use the local temp file's timestamp.
+ _lastFileModifiedTime = Poco::File(_storage->getLocalRootPath()).getLastModified();
+ _tileCache.reset(new TileCache(_uriPublic.toString(), _lastFileModifiedTime, _cacheRoot));
}
- return false;
+ // Since document has been loaded, send the stats if its WOPI
+ if (dynamic_cast<WopiStorage*>(_storage.get()) != nullptr)
+ {
+ // Get the time taken to load the file from storage
+ auto callDuration = static_cast<WopiStorage*>(_storage.get())->getWopiLoadDuration();
+ // Add the time taken to check file info
+ callDuration += getInfoCallDuration;
+ const std::string msg = "stats: wopiloadduration " + std::to_string(callDuration.count());
+ LOG_TRC("Sending to Client [" << msg << "].");
+ it->second->sendTextFrame(msg);
+ }
+
+ return true;
}
bool DocumentBroker::save(const std::string& sessionId, bool success, const std::string& result)
More information about the Libreoffice-commits
mailing list