several changes to iar/oar assets error reports
parent
28caf1e089
commit
3c6790b061
|
@ -422,15 +422,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
{
|
{
|
||||||
m_assetGatherer.GatherAll();
|
m_assetGatherer.GatherAll();
|
||||||
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[INVENTORY ARCHIVER]: Saving {0} assets for items", m_assetGatherer.GatheredUuids.Count);
|
|
||||||
int errors = m_assetGatherer.FailedUUIDs.Count;
|
int errors = m_assetGatherer.FailedUUIDs.Count;
|
||||||
|
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[INVENTORY ARCHIVER]: The items to save reference {0} assets", m_assetGatherer.GatheredUuids.Count + errors);
|
||||||
if(errors > 0)
|
if(errors > 0)
|
||||||
m_log.DebugFormat("[INVENTORY ARCHIVER]: aditional {0} assets have problems and will be ignored", errors);
|
m_log.DebugFormat("[INVENTORY ARCHIVER]: {0} of this assets have problems and will be ignored", errors);
|
||||||
|
|
||||||
AssetsRequest ar = new AssetsRequest(
|
AssetsRequest ar = new AssetsRequest(
|
||||||
new AssetsArchiver(m_archiveWriter),
|
new AssetsArchiver(m_archiveWriter),
|
||||||
m_assetGatherer.GatheredUuids, m_scene.AssetService,
|
m_assetGatherer.GatheredUuids, m_assetGatherer.FailedUUIDs.Count,
|
||||||
|
m_scene.AssetService,
|
||||||
m_scene.UserAccountService, m_scene.RegionInfo.ScopeID,
|
m_scene.UserAccountService, m_scene.RegionInfo.ScopeID,
|
||||||
options, ReceivedAllAssets);
|
options, ReceivedAllAssets);
|
||||||
ar.Execute();
|
ar.Execute();
|
||||||
|
|
|
@ -181,11 +181,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
// Archive the regions
|
// Archive the regions
|
||||||
|
|
||||||
Dictionary<UUID, sbyte> assetUuids = new Dictionary<UUID, sbyte>();
|
Dictionary<UUID, sbyte> assetUuids = new Dictionary<UUID, sbyte>();
|
||||||
|
HashSet<UUID> failedIDs = new HashSet<UUID>();
|
||||||
|
|
||||||
scenesGroup.ForEachScene(delegate(Scene scene)
|
scenesGroup.ForEachScene(delegate(Scene scene)
|
||||||
{
|
{
|
||||||
string regionDir = MultiRegionFormat ? scenesGroup.GetRegionDir(scene.RegionInfo.RegionID) : "";
|
string regionDir = MultiRegionFormat ? scenesGroup.GetRegionDir(scene.RegionInfo.RegionID) : "";
|
||||||
ArchiveOneRegion(scene, regionDir, assetUuids);
|
ArchiveOneRegion(scene, regionDir, assetUuids, failedIDs);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Archive the assets
|
// Archive the assets
|
||||||
|
@ -196,6 +197,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
AssetsRequest ar = new AssetsRequest(
|
AssetsRequest ar = new AssetsRequest(
|
||||||
new AssetsArchiver(m_archiveWriter), assetUuids,
|
new AssetsArchiver(m_archiveWriter), assetUuids,
|
||||||
|
failedIDs.Count,
|
||||||
m_rootScene.AssetService, m_rootScene.UserAccountService,
|
m_rootScene.AssetService, m_rootScene.UserAccountService,
|
||||||
m_rootScene.RegionInfo.ScopeID, options, null);
|
m_rootScene.RegionInfo.ScopeID, options, null);
|
||||||
ar.Execute();
|
ar.Execute();
|
||||||
|
@ -215,7 +217,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ArchiveOneRegion(Scene scene, string regionDir, Dictionary<UUID, sbyte> assetUuids)
|
private void ArchiveOneRegion(Scene scene, string regionDir, Dictionary<UUID, sbyte> assetUuids, HashSet<UUID> failedIDs)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[ARCHIVER]: Writing region {0}", scene.Name);
|
m_log.InfoFormat("[ARCHIVER]: Writing region {0}", scene.Name);
|
||||||
|
|
||||||
|
@ -251,7 +253,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
if (SaveAssets)
|
if (SaveAssets)
|
||||||
{
|
{
|
||||||
UuidGatherer assetGatherer = new UuidGatherer(scene.AssetService, assetUuids);
|
UuidGatherer assetGatherer = new UuidGatherer(scene.AssetService, assetUuids, failedIDs);
|
||||||
int prevAssets = assetUuids.Count;
|
int prevAssets = assetUuids.Count;
|
||||||
|
|
||||||
foreach (SceneObjectGroup sceneObject in sceneObjects)
|
foreach (SceneObjectGroup sceneObject in sceneObjects)
|
||||||
|
@ -259,12 +261,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
assetGatherer.GatherAll();
|
assetGatherer.GatherAll();
|
||||||
|
|
||||||
m_log.DebugFormat(
|
|
||||||
"[ARCHIVER]: {0} scene objects to serialize requiring save of {1} assets",
|
|
||||||
sceneObjects.Count, assetUuids.Count - prevAssets);
|
|
||||||
int errors = assetGatherer.FailedUUIDs.Count;
|
int errors = assetGatherer.FailedUUIDs.Count;
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[ARCHIVER]: {0} region scene objects to save reference {1} assets",
|
||||||
|
sceneObjects.Count, assetUuids.Count - prevAssets + errors);
|
||||||
if(errors > 0)
|
if(errors > 0)
|
||||||
m_log.DebugFormat("[ARCHIVER]: aditional {0} assets have problems and will be ignored", errors);
|
m_log.DebugFormat("[ARCHIVER]: {0} of this assets have problems and will be ignored", errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (numObjectsSkippedPermissions > 0)
|
if (numObjectsSkippedPermissions > 0)
|
||||||
|
|
|
@ -46,7 +46,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
/// <value>
|
/// <value>
|
||||||
/// Post a message to the log every x assets as a progress bar
|
/// Post a message to the log every x assets as a progress bar
|
||||||
/// </value>
|
/// </value>
|
||||||
protected static int LOG_ASSET_LOAD_NOTIFICATION_INTERVAL = 50;
|
protected static int LOG_ASSET_LOAD_NOTIFICATION_INTERVAL = 100;
|
||||||
|
|
||||||
/// <value>
|
/// <value>
|
||||||
/// Keep a count of the number of assets written so that we can provide status updates
|
/// Keep a count of the number of assets written so that we can provide status updates
|
||||||
|
|
|
@ -65,6 +65,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
/// uuids to request
|
/// uuids to request
|
||||||
/// </value>
|
/// </value>
|
||||||
protected IDictionary<UUID, sbyte> m_uuids;
|
protected IDictionary<UUID, sbyte> m_uuids;
|
||||||
|
private int m_previusErrorsCount;
|
||||||
|
|
||||||
/// <value>
|
/// <value>
|
||||||
/// Callback used when all the assets requested have been received.
|
/// Callback used when all the assets requested have been received.
|
||||||
|
@ -102,12 +103,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
protected internal AssetsRequest(
|
protected internal AssetsRequest(
|
||||||
AssetsArchiver assetsArchiver, IDictionary<UUID, sbyte> uuids,
|
AssetsArchiver assetsArchiver, IDictionary<UUID, sbyte> uuids,
|
||||||
|
int previusErrorsCount,
|
||||||
IAssetService assetService, IUserAccountService userService,
|
IAssetService assetService, IUserAccountService userService,
|
||||||
UUID scope, Dictionary<string, object> options,
|
UUID scope, Dictionary<string, object> options,
|
||||||
AssetsRequestCallback assetsRequestCallback)
|
AssetsRequestCallback assetsRequestCallback)
|
||||||
{
|
{
|
||||||
m_assetsArchiver = assetsArchiver;
|
m_assetsArchiver = assetsArchiver;
|
||||||
m_uuids = uuids;
|
m_uuids = uuids;
|
||||||
|
m_previusErrorsCount = previusErrorsCount;
|
||||||
m_assetsRequestCallback = assetsRequestCallback;
|
m_assetsRequestCallback = assetsRequestCallback;
|
||||||
m_assetService = assetService;
|
m_assetService = assetService;
|
||||||
m_userAccountService = userService;
|
m_userAccountService = userService;
|
||||||
|
@ -119,8 +122,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
protected internal void Execute()
|
protected internal void Execute()
|
||||||
{
|
{
|
||||||
Culture.SetCurrentCulture();
|
Culture.SetCurrentCulture();
|
||||||
m_log.DebugFormat("[ARCHIVER]: AssetsRequest executed looking for {0} possible assets", m_repliesRequired);
|
|
||||||
|
|
||||||
// We can stop here if there are no assets to fetch
|
// We can stop here if there are no assets to fetch
|
||||||
if (m_repliesRequired == 0)
|
if (m_repliesRequired == 0)
|
||||||
{
|
{
|
||||||
|
@ -169,19 +170,20 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
}
|
}
|
||||||
|
|
||||||
m_timeOutTimer.Dispose();
|
m_timeOutTimer.Dispose();
|
||||||
|
int totalerrors = m_notFoundAssetUuids.Count + m_previusErrorsCount;
|
||||||
|
|
||||||
if(m_timeout)
|
if(m_timeout)
|
||||||
m_log.DebugFormat("[ARCHIVER]: Aborted because AssetService request timeout. Successfully added {0} assets", m_foundAssetUuids.Count);
|
m_log.DebugFormat("[ARCHIVER]: Aborted because AssetService request timeout. Successfully added {0} assets", m_foundAssetUuids.Count);
|
||||||
else if(m_notFoundAssetUuids.Count == 0)
|
else if(totalerrors == 0)
|
||||||
m_log.DebugFormat("[ARCHIVER]: Successfully added all {0} assets", m_foundAssetUuids.Count);
|
m_log.DebugFormat("[ARCHIVER]: Successfully added all {0} assets", m_foundAssetUuids.Count);
|
||||||
else
|
else
|
||||||
m_log.DebugFormat("[ARCHIVER]: Successfully added {0} assets ({1} assets not found)",
|
m_log.DebugFormat("[ARCHIVER]: Successfully added {0} assets ({1} assets of total request where not found or are damaged",
|
||||||
m_foundAssetUuids.Count, m_notFoundAssetUuids.Count);
|
m_foundAssetUuids.Count, totalerrors);
|
||||||
|
|
||||||
PerformAssetsRequestCallback(m_timeout);
|
PerformAssetsRequestCallback(m_timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnTimeout(object source, ElapsedEventArgs args)
|
private void OnTimeout(object source, ElapsedEventArgs args)
|
||||||
{
|
{
|
||||||
m_timeout = true;
|
m_timeout = true;
|
||||||
}
|
}
|
||||||
|
@ -189,7 +191,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Perform the callback on the original requester of the assets
|
/// Perform the callback on the original requester of the assets
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected void PerformAssetsRequestCallback(object o)
|
private void PerformAssetsRequestCallback(object o)
|
||||||
{
|
{
|
||||||
if(m_assetsRequestCallback == null)
|
if(m_assetsRequestCallback == null)
|
||||||
return;
|
return;
|
||||||
|
@ -208,7 +210,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected AssetBase PostProcess(AssetBase asset)
|
private AssetBase PostProcess(AssetBase asset)
|
||||||
{
|
{
|
||||||
if (asset.Type == (sbyte)AssetType.Object && asset.Data != null && m_options.ContainsKey("home"))
|
if (asset.Type == (sbyte)AssetType.Object && asset.Data != null && m_options.ContainsKey("home"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -93,7 +93,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="assetService">
|
/// <param name="assetService">
|
||||||
/// Asset service.
|
/// Asset service.
|
||||||
/// </param>
|
/// </param>
|
||||||
public UuidGatherer(IAssetService assetService) : this(assetService, new Dictionary<UUID, sbyte>()) {}
|
public UuidGatherer(IAssetService assetService) : this(assetService, new Dictionary<UUID, sbyte>(), new HashSet <UUID>()) {}
|
||||||
|
public UuidGatherer(IAssetService assetService, IDictionary<UUID, sbyte> collector) : this(assetService, collector, new HashSet <UUID>()) {}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="OpenSim.Region.Framework.Scenes.UuidGatherer"/> class.
|
/// Initializes a new instance of the <see cref="OpenSim.Region.Framework.Scenes.UuidGatherer"/> class.
|
||||||
|
@ -105,14 +106,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Gathered UUIDs will be collected in this dictinaory.
|
/// Gathered UUIDs will be collected in this dictinaory.
|
||||||
/// It can be pre-populated if you want to stop the gatherer from analyzing assets that have already been fetched and inspected.
|
/// It can be pre-populated if you want to stop the gatherer from analyzing assets that have already been fetched and inspected.
|
||||||
/// </param>
|
/// </param>
|
||||||
public UuidGatherer(IAssetService assetService, IDictionary<UUID, sbyte> collector)
|
public UuidGatherer(IAssetService assetService, IDictionary<UUID, sbyte> collector, HashSet <UUID> failedIDs)
|
||||||
{
|
{
|
||||||
m_assetService = assetService;
|
m_assetService = assetService;
|
||||||
GatheredUuids = collector;
|
GatheredUuids = collector;
|
||||||
|
|
||||||
// FIXME: Not efficient for searching, can improve.
|
// FIXME: Not efficient for searching, can improve.
|
||||||
m_assetUuidsToInspect = new Queue<UUID>();
|
m_assetUuidsToInspect = new Queue<UUID>();
|
||||||
FailedUUIDs = new HashSet<UUID>();
|
FailedUUIDs = failedIDs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -301,14 +302,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[UUID GATHERER]: Failed to get asset with id {0} : {1}", assetUuid, e.Message);
|
m_log.ErrorFormat("[UUID GATHERER]: Failed to get asset {0} : {1}", assetUuid, e.Message);
|
||||||
FailedUUIDs.Add(assetUuid);
|
FailedUUIDs.Add(assetUuid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(assetBase == null)
|
if(assetBase == null)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[UUID GATHERER]: asset with id {0} not found", assetUuid);
|
m_log.ErrorFormat("[UUID GATHERER]: asset {0} not found", assetUuid);
|
||||||
FailedUUIDs.Add(assetUuid);
|
FailedUUIDs.Add(assetUuid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -317,7 +318,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if(assetBase.Data == null || assetBase.Data.Length == 0)
|
if(assetBase.Data == null || assetBase.Data.Length == 0)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[UUID GATHERER]: asset with id {0} type {1} has no data", assetUuid, assetType);
|
m_log.ErrorFormat("[UUID GATHERER]: asset {0}, type {1} has no data", assetUuid, assetType);
|
||||||
FailedUUIDs.Add(assetUuid);
|
FailedUUIDs.Add(assetUuid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue