diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
index d901b54432..985b939691 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
@@ -132,7 +132,12 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
part.CreatorID = masterAvatarId;
part.OwnerID = masterAvatarId;
part.LastOwnerID = masterAvatarId;
- }
+
+ // For now, give all incoming scene objects new uuids. This will allow scenes to be cloned
+ // on the same region server and multiple examples a single object archive to be imported
+ // to the same scene (when this is possible).
+ //part.UUID = LLUUID.Random();
+ }
if (m_scene.AddRestoredSceneObject(sceneObject, true, false))
{
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs
index e980650bcf..0341a70041 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs
@@ -44,7 +44,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
///
/// Method called when all the necessary assets for an archive request have been received.
///
- public delegate void AssetsRequestCallback(IDictionary assets);
+ public delegate void AssetsRequestCallback(IDictionary assetsFound, ICollection assetsNotFoundUuids);
///
/// Execute the write of an archive once we have received all the necessary data
@@ -73,9 +73,15 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
m_savePath = savePath;
}
- protected internal void ReceivedAllAssets(IDictionary assets)
+ protected internal void ReceivedAllAssets(IDictionary assetsFound, ICollection assetsNotFoundUuids)
{
- m_log.DebugFormat("[ARCHIVER]: Received all {0} assets required", assets.Count);
+ foreach (LLUUID uuid in assetsNotFoundUuids)
+ {
+ m_log.DebugFormat("[ARCHIVER]: Could not find asset {0}", uuid);
+ }
+
+ m_log.InfoFormat(
+ "[ARCHIVER]: Received {0} of {1} assets requested", assetsFound.Count, assetsFound.Count + assetsNotFoundUuids.Count);
TarArchiveWriter archive = new TarArchiveWriter();
@@ -108,7 +114,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
}
// Write out assets
- AssetsArchiver assetsArchiver = new AssetsArchiver(assets);
+ AssetsArchiver assetsArchiver = new AssetsArchiver(assetsFound);
assetsArchiver.Archive(archive);
archive.WriteTar(new GZipStream(new FileStream(m_savePath, FileMode.Create), CompressionMode.Compress));
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs
index 9a1b5608d2..81d85d214b 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs
@@ -121,23 +121,16 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
{
AssetBase asset = m_assets[uuid];
- if (asset != null)
+ string extension = string.Empty;
+
+ if (ArchiveConstants.ASSET_TYPE_TO_EXTENSION.ContainsKey(asset.Type))
{
- string extension = string.Empty;
-
- if (ArchiveConstants.ASSET_TYPE_TO_EXTENSION.ContainsKey(asset.Type))
- {
- extension = ArchiveConstants.ASSET_TYPE_TO_EXTENSION[asset.Type];
- }
-
- archive.AddFile(
- ArchiveConstants.ASSETS_PATH + uuid.ToString() + extension,
- asset.Data);
- }
- else
- {
- m_log.WarnFormat("[ARCHIVER]: Could not find asset {0} to archive", uuid);
+ extension = ArchiveConstants.ASSET_TYPE_TO_EXTENSION[asset.Type];
}
+
+ archive.AddFile(
+ ArchiveConstants.ASSETS_PATH + uuid.ToString() + extension,
+ asset.Data);
}
}
}
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
index ebcbcc7c65..2fd79b1438 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
@@ -54,6 +54,11 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
/// Assets retrieved in this request
///
protected Dictionary m_assets = new Dictionary();
+
+ ///
+ /// Maintain a list of assets that could not be found. This will be passed back to the requester.
+ ///
+ protected List m_notFoundAssetUuids = new List();
///
/// Record the number of asset replies required so we know when we've finished
@@ -77,7 +82,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
{
// We can stop here if there are no assets to fetch
if (m_repliesRequired == 0)
- m_assetsRequestCallback(m_assets);
+ m_assetsRequestCallback(m_assets, m_notFoundAssetUuids);
foreach (LLUUID uuid in m_uuids)
{
@@ -92,7 +97,10 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
///
public void AssetRequestCallback(LLUUID assetID, AssetBase asset)
{
- m_assets[assetID] = asset;
+ if (asset != null)
+ m_assets[assetID] = asset;
+ else
+ m_notFoundAssetUuids.Add(assetID);
if (m_assets.Count == m_repliesRequired)
{
@@ -108,7 +116,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
///
protected void PerformAssetsRequestCallback()
{
- m_assetsRequestCallback(m_assets);
+ m_assetsRequestCallback(m_assets, m_notFoundAssetUuids);
}
}
}