Fix asset server debug messages logging category

This commit is contained in:
Atlante45 2017-08-09 17:12:47 -07:00
parent 39f04adc8d
commit cefd16ad95
3 changed files with 82 additions and 49 deletions

View file

@ -13,6 +13,7 @@
#include "AssetServer.h" #include "AssetServer.h"
#include <thread> #include <thread>
#include <memory>
#include <QtCore/QCoreApplication> #include <QtCore/QCoreApplication>
#include <QtCore/QCryptographicHash> #include <QtCore/QCryptographicHash>
@ -27,17 +28,16 @@
#include <QtCore/QVector> #include <QtCore/QVector>
#include <qurlquery.h> #include <qurlquery.h>
#include <ClientServerUtils.h>
#include <FBXBaker.h>
#include <NodeType.h>
#include <SharedUtil.h> #include <SharedUtil.h>
#include <PathUtils.h> #include <PathUtils.h>
#include "NetworkLogging.h" #include "AssetServerLogging.h"
#include "NodeType.h"
#include "SendAssetTask.h" #include "SendAssetTask.h"
#include "UploadAssetTask.h" #include "UploadAssetTask.h"
#include <ClientServerUtils.h>
#include <FBXBaker.h>
#include <memory>
static const uint8_t MIN_CORES_FOR_MULTICORE = 4; static const uint8_t MIN_CORES_FOR_MULTICORE = 4;
static const uint8_t CPU_AFFINITY_COUNT_HIGH = 2; static const uint8_t CPU_AFFINITY_COUNT_HIGH = 2;
@ -196,7 +196,7 @@ void updateConsumedCores() {
if (isInterfaceRunning) { if (isInterfaceRunning) {
coreCount = coreCount > MIN_CORES_FOR_MULTICORE ? CPU_AFFINITY_COUNT_HIGH : CPU_AFFINITY_COUNT_LOW; coreCount = coreCount > MIN_CORES_FOR_MULTICORE ? CPU_AFFINITY_COUNT_HIGH : CPU_AFFINITY_COUNT_LOW;
} }
qDebug() << "Setting max consumed cores to " << coreCount; qCDebug(asset_server) << "Setting max consumed cores to " << coreCount;
setMaxCores(coreCount); setMaxCores(coreCount);
} }
@ -236,7 +236,7 @@ AssetServer::AssetServer(ReceivedMessage& message) :
void AssetServer::run() { void AssetServer::run() {
qDebug() << "Waiting for connection to domain to request settings from domain-server."; qCDebug(asset_server) << "Waiting for connection to domain to request settings from domain-server.";
// wait until we have the domain-server settings, otherwise we bail // wait until we have the domain-server settings, otherwise we bail
DomainHandler& domainHandler = DependencyManager::get<NodeList>()->getDomainHandler(); DomainHandler& domainHandler = DependencyManager::get<NodeList>()->getDomainHandler();
@ -257,7 +257,7 @@ void AssetServer::completeSetup() {
static const QString ASSET_SERVER_SETTINGS_KEY = "asset_server"; static const QString ASSET_SERVER_SETTINGS_KEY = "asset_server";
if (!settingsObject.contains(ASSET_SERVER_SETTINGS_KEY)) { if (!settingsObject.contains(ASSET_SERVER_SETTINGS_KEY)) {
qCritical() << "Received settings from the domain-server with no asset-server section. Stopping assignment."; qCCritical(asset_server) << "Received settings from the domain-server with no asset-server section. Stopping assignment.";
setFinished(true); setFinished(true);
return; return;
} }
@ -272,7 +272,7 @@ void AssetServer::completeSetup() {
const int BITS_PER_MEGABITS = 1000 * 1000; const int BITS_PER_MEGABITS = 1000 * 1000;
int maxBandwidth = maxBandwidthFloat * BITS_PER_MEGABITS; int maxBandwidth = maxBandwidthFloat * BITS_PER_MEGABITS;
nodeList->setConnectionMaxBandwidth(maxBandwidth); nodeList->setConnectionMaxBandwidth(maxBandwidth);
qInfo() << "Set maximum bandwith per connection to" << maxBandwidthFloat << "Mb/s." qCInfo(asset_server) << "Set maximum bandwith per connection to" << maxBandwidthFloat << "Mb/s."
" (" << maxBandwidth << "bits/s)"; " (" << maxBandwidth << "bits/s)";
} }
@ -281,7 +281,7 @@ void AssetServer::completeSetup() {
auto assetsJSONValue = assetServerObject[ASSETS_PATH_OPTION]; auto assetsJSONValue = assetServerObject[ASSETS_PATH_OPTION];
if (!assetsJSONValue.isString()) { if (!assetsJSONValue.isString()) {
qCritical() << "Received an assets path from the domain-server that could not be parsed. Stopping assignment."; qCCritical(asset_server) << "Received an assets path from the domain-server that could not be parsed. Stopping assignment.";
setFinished(true); setFinished(true);
return; return;
} }
@ -298,19 +298,19 @@ void AssetServer::completeSetup() {
_resourcesDirectory = QDir(absoluteFilePath); _resourcesDirectory = QDir(absoluteFilePath);
qDebug() << "Creating resources directory"; qCDebug(asset_server) << "Creating resources directory";
_resourcesDirectory.mkpath("."); _resourcesDirectory.mkpath(".");
_filesDirectory = _resourcesDirectory; _filesDirectory = _resourcesDirectory;
if (!_resourcesDirectory.mkpath(ASSET_FILES_SUBDIR) || !_filesDirectory.cd(ASSET_FILES_SUBDIR)) { if (!_resourcesDirectory.mkpath(ASSET_FILES_SUBDIR) || !_filesDirectory.cd(ASSET_FILES_SUBDIR)) {
qCritical() << "Unable to create file directory for asset-server files. Stopping assignment."; qCCritical(asset_server) << "Unable to create file directory for asset-server files. Stopping assignment.";
setFinished(true); setFinished(true);
return; return;
} }
// load whatever mappings we currently have from the local file // load whatever mappings we currently have from the local file
if (loadMappingsFromFile()) { if (loadMappingsFromFile()) {
qInfo() << "Serving files from: " << _filesDirectory.path(); qCInfo(asset_server) << "Serving files from: " << _filesDirectory.path();
// Check the asset directory to output some information about what we have // Check the asset directory to output some information about what we have
auto files = _filesDirectory.entryList(QDir::Files); auto files = _filesDirectory.entryList(QDir::Files);
@ -318,7 +318,7 @@ void AssetServer::completeSetup() {
QRegExp hashFileRegex { ASSET_HASH_REGEX_STRING }; QRegExp hashFileRegex { ASSET_HASH_REGEX_STRING };
auto hashedFiles = files.filter(hashFileRegex); auto hashedFiles = files.filter(hashFileRegex);
qInfo() << "There are" << hashedFiles.size() << "asset files in the asset directory."; qCInfo(asset_server) << "There are" << hashedFiles.size() << "asset files in the asset directory.";
if (_fileMappings.count() > 0) { if (_fileMappings.count() > 0) {
cleanupUnmappedFiles(); cleanupUnmappedFiles();
@ -328,7 +328,7 @@ void AssetServer::completeSetup() {
bakeAssets(); bakeAssets();
} else { } else {
qCritical() << "Asset Server assignment will not continue because mapping file could not be loaded."; qCCritical(asset_server) << "Asset Server assignment will not continue because mapping file could not be loaded.";
setFinished(true); setFinished(true);
} }
} }
@ -341,7 +341,7 @@ void AssetServer::cleanupUnmappedFiles() {
// grab the currently mapped hashes // grab the currently mapped hashes
auto mappedHashes = _fileMappings.values(); auto mappedHashes = _fileMappings.values();
qInfo() << "Performing unmapped asset cleanup."; qCInfo(asset_server) << "Performing unmapped asset cleanup.";
for (const auto& fileInfo : files) { for (const auto& fileInfo : files) {
if (hashFileRegex.exactMatch(fileInfo.fileName())) { if (hashFileRegex.exactMatch(fileInfo.fileName())) {
@ -350,9 +350,9 @@ void AssetServer::cleanupUnmappedFiles() {
QFile removeableFile { fileInfo.absoluteFilePath() }; QFile removeableFile { fileInfo.absoluteFilePath() };
if (removeableFile.remove()) { if (removeableFile.remove()) {
qDebug() << "\tDeleted" << fileInfo.fileName() << "from asset files directory since it is unmapped."; qCDebug(asset_server) << "\tDeleted" << fileInfo.fileName() << "from asset files directory since it is unmapped.";
} else { } else {
qDebug() << "\tAttempt to delete unmapped file" << fileInfo.fileName() << "failed"; qCDebug(asset_server) << "\tAttempt to delete unmapped file" << fileInfo.fileName() << "failed";
} }
} }
} }
@ -538,7 +538,7 @@ void AssetServer::handleAssetGetInfo(QSharedPointer<ReceivedMessage> message, Sh
MessageID messageID; MessageID messageID;
if (message->getSize() < qint64(SHA256_HASH_LENGTH + sizeof(messageID))) { if (message->getSize() < qint64(SHA256_HASH_LENGTH + sizeof(messageID))) {
qDebug() << "ERROR bad file request"; qCDebug(asset_server) << "ERROR bad file request";
return; return;
} }
@ -557,11 +557,11 @@ void AssetServer::handleAssetGetInfo(QSharedPointer<ReceivedMessage> message, Sh
QFileInfo fileInfo { _filesDirectory.filePath(fileName) }; QFileInfo fileInfo { _filesDirectory.filePath(fileName) };
if (fileInfo.exists() && fileInfo.isReadable()) { if (fileInfo.exists() && fileInfo.isReadable()) {
qDebug() << "Opening file: " << fileInfo.filePath(); qCDebug(asset_server) << "Opening file: " << fileInfo.filePath();
replyPacket->writePrimitive(AssetServerError::NoError); replyPacket->writePrimitive(AssetServerError::NoError);
replyPacket->writePrimitive(fileInfo.size()); replyPacket->writePrimitive(fileInfo.size());
} else { } else {
qDebug() << "Asset not found: " << QString(hexHash); qCDebug(asset_server) << "Asset not found: " << QString(hexHash);
replyPacket->writePrimitive(AssetServerError::AssetNotFound); replyPacket->writePrimitive(AssetServerError::AssetNotFound);
} }
@ -574,7 +574,7 @@ void AssetServer::handleAssetGet(QSharedPointer<ReceivedMessage> message, Shared
auto minSize = qint64(sizeof(MessageID) + SHA256_HASH_LENGTH + sizeof(DataOffset) + sizeof(DataOffset)); auto minSize = qint64(sizeof(MessageID) + SHA256_HASH_LENGTH + sizeof(DataOffset) + sizeof(DataOffset));
if (message->getSize() < minSize) { if (message->getSize() < minSize) {
qDebug() << "ERROR bad file request"; qCDebug(asset_server) << "ERROR bad file request";
return; return;
} }
@ -586,7 +586,7 @@ void AssetServer::handleAssetGet(QSharedPointer<ReceivedMessage> message, Shared
void AssetServer::handleAssetUpload(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) { void AssetServer::handleAssetUpload(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) {
if (senderNode->getCanWriteToAssetServer()) { if (senderNode->getCanWriteToAssetServer()) {
qDebug() << "Starting an UploadAssetTask for upload from" << uuidStringWithoutCurlyBraces(senderNode->getUUID()); qCDebug(asset_server) << "Starting an UploadAssetTask for upload from" << uuidStringWithoutCurlyBraces(senderNode->getUUID());
auto task = new UploadAssetTask(message, senderNode, _filesDirectory); auto task = new UploadAssetTask(message, senderNode, _filesDirectory);
_transferTaskPool.start(task); _transferTaskPool.start(task);
@ -701,12 +701,12 @@ bool AssetServer::loadMappingsFromFile() {
bool shouldDrop = false; bool shouldDrop = false;
if (!isValidFilePath(it.key())) { if (!isValidFilePath(it.key())) {
qWarning() << "Will not keep mapping for" << it.key() << "since it is not a valid path."; qCWarning(asset_server) << "Will not keep mapping for" << it.key() << "since it is not a valid path.";
shouldDrop = true; shouldDrop = true;
} }
if (!isValidHash(it.value().toString())) { if (!isValidHash(it.value().toString())) {
qWarning() << "Will not keep mapping for" << it.key() << "since it does not have a valid hash."; qCWarning(asset_server) << "Will not keep mapping for" << it.key() << "since it does not have a valid hash.";
shouldDrop = true; shouldDrop = true;
} }
@ -717,15 +717,15 @@ bool AssetServer::loadMappingsFromFile() {
} }
} }
qInfo() << "Loaded" << _fileMappings.count() << "mappings from map file at" << mapFilePath; qCInfo(asset_server) << "Loaded" << _fileMappings.count() << "mappings from map file at" << mapFilePath;
return true; return true;
} }
} }
qCritical() << "Failed to read mapping file at" << mapFilePath; qCCritical(asset_server) << "Failed to read mapping file at" << mapFilePath;
return false; return false;
} else { } else {
qInfo() << "No existing mappings loaded from file since no file was found at" << mapFilePath; qCInfo(asset_server) << "No existing mappings loaded from file since no file was found at" << mapFilePath;
} }
return true; return true;
@ -740,13 +740,13 @@ bool AssetServer::writeMappingsToFile() {
QJsonDocument jsonDocument { jsonObject }; QJsonDocument jsonDocument { jsonObject };
if (mapFile.write(jsonDocument.toJson()) != -1) { if (mapFile.write(jsonDocument.toJson()) != -1) {
qDebug() << "Wrote JSON mappings to file at" << mapFilePath; qCDebug(asset_server) << "Wrote JSON mappings to file at" << mapFilePath;
return true; return true;
} else { } else {
qWarning() << "Failed to write JSON mappings to file at" << mapFilePath; qCWarning(asset_server) << "Failed to write JSON mappings to file at" << mapFilePath;
} }
} else { } else {
qWarning() << "Failed to open map file at" << mapFilePath; qCWarning(asset_server) << "Failed to open map file at" << mapFilePath;
} }
return false; return false;
@ -756,12 +756,12 @@ bool AssetServer::setMapping(AssetPath path, AssetHash hash) {
path = path.trimmed(); path = path.trimmed();
if (!isValidFilePath(path)) { if (!isValidFilePath(path)) {
qWarning() << "Cannot set a mapping for invalid path:" << path << "=>" << hash; qCWarning(asset_server) << "Cannot set a mapping for invalid path:" << path << "=>" << hash;
return false; return false;
} }
if (!isValidHash(hash)) { if (!isValidHash(hash)) {
qWarning() << "Cannot set a mapping for invalid hash" << path << "=>" << hash; qCWarning(asset_server) << "Cannot set a mapping for invalid hash" << path << "=>" << hash;
return false; return false;
} }
@ -774,7 +774,7 @@ bool AssetServer::setMapping(AssetPath path, AssetHash hash) {
// attempt to write to file // attempt to write to file
if (writeMappingsToFile()) { if (writeMappingsToFile()) {
// persistence succeeded, we are good to go // persistence succeeded, we are good to go
qDebug() << "Set mapping:" << path << "=>" << hash; qCDebug(asset_server) << "Set mapping:" << path << "=>" << hash;
maybeBake(path, hash); maybeBake(path, hash);
return true; return true;
} else { } else {
@ -785,7 +785,7 @@ bool AssetServer::setMapping(AssetPath path, AssetHash hash) {
_fileMappings[path] = oldMapping; _fileMappings[path] = oldMapping;
} }
qWarning() << "Failed to persist mapping:" << path << "=>" << hash; qCWarning(asset_server) << "Failed to persist mapping:" << path << "=>" << hash;
return false; return false;
} }
@ -825,9 +825,9 @@ bool AssetServer::deleteMappings(AssetPathList& paths) {
auto sizeNow = _fileMappings.size(); auto sizeNow = _fileMappings.size();
if (sizeBefore != sizeNow) { if (sizeBefore != sizeNow) {
qDebug() << "Deleted" << sizeBefore - sizeNow << "mappings in folder: " << path; qCDebug(asset_server) << "Deleted" << sizeBefore - sizeNow << "mappings in folder: " << path;
} else { } else {
qDebug() << "Did not find any mappings to delete in folder:" << path; qCDebug(asset_server) << "Did not find any mappings to delete in folder:" << path;
} }
} else { } else {
@ -836,9 +836,9 @@ bool AssetServer::deleteMappings(AssetPathList& paths) {
// add this hash to the list we need to check for asset removal from server // add this hash to the list we need to check for asset removal from server
hashesToCheckForDeletion << oldMapping.toString(); hashesToCheckForDeletion << oldMapping.toString();
qDebug() << "Deleted a mapping:" << path << "=>" << oldMapping.toString(); qCDebug(asset_server) << "Deleted a mapping:" << path << "=>" << oldMapping.toString();
} else { } else {
qDebug() << "Unable to delete a mapping that was not found:" << path; qCDebug(asset_server) << "Unable to delete a mapping that was not found:" << path;
} }
} }
} }
@ -864,15 +864,15 @@ bool AssetServer::deleteMappings(AssetPathList& paths) {
QFile removeableFile { _filesDirectory.absoluteFilePath(hash) }; QFile removeableFile { _filesDirectory.absoluteFilePath(hash) };
if (removeableFile.remove()) { if (removeableFile.remove()) {
qDebug() << "\tDeleted" << hash << "from asset files directory since it is now unmapped."; qCDebug(asset_server) << "\tDeleted" << hash << "from asset files directory since it is now unmapped.";
} else { } else {
qDebug() << "\tAttempt to delete unmapped file" << hash << "failed"; qCDebug(asset_server) << "\tAttempt to delete unmapped file" << hash << "failed";
} }
} }
return true; return true;
} else { } else {
qWarning() << "Failed to persist deleted mappings, rolling back"; qCWarning(asset_server) << "Failed to persist deleted mappings, rolling back";
// we didn't delete the previous mapping, put it back in our in-memory representation // we didn't delete the previous mapping, put it back in our in-memory representation
_fileMappings = oldMappings; _fileMappings = oldMappings;
@ -886,7 +886,7 @@ bool AssetServer::renameMapping(AssetPath oldPath, AssetPath newPath) {
newPath = newPath.trimmed(); newPath = newPath.trimmed();
if (!isValidFilePath(oldPath) || !isValidFilePath(newPath)) { if (!isValidFilePath(oldPath) || !isValidFilePath(newPath)) {
qWarning() << "Cannot perform rename with invalid paths - both should have leading forward and no ending slashes:" qCWarning(asset_server) << "Cannot perform rename with invalid paths - both should have leading forward and no ending slashes:"
<< oldPath << "=>" << newPath; << oldPath << "=>" << newPath;
return false; return false;
@ -896,7 +896,7 @@ bool AssetServer::renameMapping(AssetPath oldPath, AssetPath newPath) {
if (pathIsFolder(oldPath)) { if (pathIsFolder(oldPath)) {
if (!pathIsFolder(newPath)) { if (!pathIsFolder(newPath)) {
// we were asked to rename a path to a folder to a path that isn't a folder, this is a fail // we were asked to rename a path to a folder to a path that isn't a folder, this is a fail
qWarning() << "Cannot rename mapping from folder path" << oldPath << "to file path" << newPath; qCWarning(asset_server) << "Cannot rename mapping from folder path" << oldPath << "to file path" << newPath;
return false; return false;
} }
@ -922,21 +922,21 @@ bool AssetServer::renameMapping(AssetPath oldPath, AssetPath newPath) {
if (writeMappingsToFile()) { if (writeMappingsToFile()) {
// persisted the changed mappings, return success // persisted the changed mappings, return success
qDebug() << "Renamed folder mapping:" << oldPath << "=>" << newPath; qCDebug(asset_server) << "Renamed folder mapping:" << oldPath << "=>" << newPath;
return true; return true;
} else { } else {
// couldn't persist the renamed paths, rollback and return failure // couldn't persist the renamed paths, rollback and return failure
_fileMappings = oldMappings; _fileMappings = oldMappings;
qWarning() << "Failed to persist renamed folder mapping:" << oldPath << "=>" << newPath; qCWarning(asset_server) << "Failed to persist renamed folder mapping:" << oldPath << "=>" << newPath;
return false; return false;
} }
} else { } else {
if (pathIsFolder(newPath)) { if (pathIsFolder(newPath)) {
// we were asked to rename a path to a file to a path that is a folder, this is a fail // we were asked to rename a path to a file to a path that is a folder, this is a fail
qWarning() << "Cannot rename mapping from file path" << oldPath << "to folder path" << newPath; qCWarning(asset_server) << "Cannot rename mapping from file path" << oldPath << "to folder path" << newPath;
return false; return false;
} }
@ -952,7 +952,7 @@ bool AssetServer::renameMapping(AssetPath oldPath, AssetPath newPath) {
if (writeMappingsToFile()) { if (writeMappingsToFile()) {
// persisted the renamed mapping, return success // persisted the renamed mapping, return success
qDebug() << "Renamed mapping:" << oldPath << "=>" << newPath; qCDebug(asset_server) << "Renamed mapping:" << oldPath << "=>" << newPath;
return true; return true;
} else { } else {
@ -967,7 +967,7 @@ bool AssetServer::renameMapping(AssetPath oldPath, AssetPath newPath) {
_fileMappings.remove(newPath); _fileMappings.remove(newPath);
} }
qDebug() << "Failed to persist renamed mapping:" << oldPath << "=>" << newPath; qCDebug(asset_server) << "Failed to persist renamed mapping:" << oldPath << "=>" << newPath;
return false; return false;
} }

View file

@ -0,0 +1,14 @@
//
// AssetServerLogging.cpp
// assignment-client/src/assets
//
// Created by Clement Brisset on 8/9/17.
// Copyright 2017 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include "AssetServerLogging.h"
Q_LOGGING_CATEGORY(asset_server, "hifi.asset-server")

View file

@ -0,0 +1,19 @@
//
// AssetServerLogging.h
// assignment-client/src/assets
//
// Created by Clement Brisset on 8/9/17.
// Copyright 2017 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_AssetServerLogging_h
#define hifi_AssetServerLogging_h
#include <QLoggingCategory>
Q_DECLARE_LOGGING_CATEGORY(asset_server)
#endif // hifi_AssetServerLogging_h