From dbd2b4523319758c8c0e093a89be8bcb9b2e4ee1 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Fri, 23 Jan 2009 20:38:44 +0000 Subject: [PATCH] * Write a simple archive loading test which doesn't actually do any testing yet apart from not blow up --- .../Communications/Cache/AssetCache.cs | 10 +++---- .../World/Archiver/ArchiveReadRequest.cs | 11 ++++++++ .../Archiver/ArchiveWriteRequestExecution.cs | 6 ++--- .../World/Archiver/TarArchiveWriter.cs | 2 +- .../World/Archiver/Tests/ArchiverTests.cs | 26 ++++++++++++++++++- 5 files changed, 43 insertions(+), 12 deletions(-) diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index 436f175f45..653597b167 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs @@ -41,16 +41,12 @@ namespace OpenSim.Framework.Communications.Cache /// /// Manages local cache of assets and their sending to viewers. - /// + /// + /// /// This class actually encapsulates two largely separate mechanisms. One mechanism fetches assets either /// synchronously or async and passes the data back to the requester. The second mechanism fetches assets and /// sends packetised data directly back to the client. The only point where they meet is AssetReceived() and - /// AssetNotFound(), which means they do share the same asset and texture caches. - /// - /// TODO: Assets in this cache are effectively immortal (they are never disposed of through old age). - /// This is not a huge problem at the moment since other memory use usually dwarfs that used by assets - /// but it's something to bear in mind. - /// + /// AssetNotFound(), which means they do share the same asset and texture caches.I agr public class AssetCache : IAssetReceiver { protected ICache m_memcache = new SimpleMemoryCache(); diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs index bd58e7c80c..ce293e4312 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs @@ -276,6 +276,17 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver asset.Data = data; m_scene.AssetCache.AddAsset(asset); + + /** + * Create layers on decode for image assets. This is likely to significantly increase the time to load archives so + * it might be best done when dearchive takes place on a separate thread + if (asset.Type=AssetType.Texture) + { + IJ2KDecoder cacheLayerDecode = scene.RequestModuleInterface(); + if (cacheLayerDecode != null) + cacheLayerDecode.syncdecode(asset.FullID, asset.Data); + } + */ return true; } diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs index 0c75951d32..bade121ee9 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs @@ -88,7 +88,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver TarArchiveWriter archive = new TarArchiveWriter(); // Write out control file - archive.AddFile(ArchiveConstants.CONTROL_FILE_PATH, CreateControlFile()); + archive.AddFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p2ControlFile()); // Write out region settings string settingsPath = String.Format("{0}{1}.xml", ArchiveConstants.SETTINGS_PATH, m_regionInfo.RegionName); @@ -129,10 +129,10 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver } /// - /// Create the control file for this archive + /// Create the control file for a 0.2 version archive /// /// - protected string CreateControlFile() + public static string Create0p2ControlFile() { StringWriter sw = new StringWriter(); XmlTextWriter xtw = new XmlTextWriter(sw); diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveWriter.cs b/OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveWriter.cs index d4a8a46299..55edec084a 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveWriter.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/TarArchiveWriter.cs @@ -32,7 +32,7 @@ using System.Text; //using System.Reflection; //using log4net; -namespace OpenSim.Region.Environment +namespace OpenSim.Region.Environment.Modules.World.Archiver { /// /// Temporary code to produce a tar archive in tar v7 format diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/Tests/ArchiverTests.cs b/OpenSim/Region/Environment/Modules/World/Archiver/Tests/ArchiverTests.cs index db296b0277..4f4f53cb25 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/Tests/ArchiverTests.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/Tests/ArchiverTests.cs @@ -40,7 +40,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver.Tests public class ArchiverTests { /// - /// Test saving a V0.2 OpenSim Region Archive. Does not yet do what it says on the tin + /// Test saving a V0.2 OpenSim Region Archive. /// [Test] public void TestSaveOarV0p2() @@ -76,5 +76,29 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver.Tests // TODO: Test presence of more files and contents of files. } + + /// + /// Test loading a V0.2 OpenSim Region Archive. Does not yet do what it says on the tin. + /// + [Test] + public void TestLoadOarV0p2() + { + MemoryStream archiveWriteStream = new MemoryStream(); + TarArchiveWriter tar = new TarArchiveWriter(); + + tar.AddFile(ArchiveConstants.CONTROL_FILE_PATH, ArchiveWriteRequestExecution.Create0p2ControlFile()); + tar.WriteTar(archiveWriteStream); + + MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); + + ArchiverModule archiverModule = new ArchiverModule(); + + Scene scene = SceneSetupHelpers.SetupScene(); + SceneSetupHelpers.SetupSceneModules(scene, archiverModule); + + archiverModule.DearchiveRegion(archiveReadStream); + + // TODO: Okay, so nothing is tested yet apart from the fact that it doesn't blow up + } } } \ No newline at end of file