From 1d745cca1753ee62a75633029adeb3abfb9b224a Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Wed, 4 Jun 2008 18:50:58 +0000 Subject: * Start writing out assets metadata file for archiver * Ignoring it on reload as of yet --- .../Region/ClientStack/LindenUDP/LLClientView.cs | 2 +- .../Modules/World/Archiver/ArchiveWriteRequest.cs | 20 +--- .../Modules/World/Archiver/AssetsArchiver.cs | 129 +++++++++++++++++++++ 3 files changed, 133 insertions(+), 18 deletions(-) create mode 100644 OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index af23660..172288a 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -718,6 +718,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { m_secureSessionId = sessionInfo.LoginInfo.SecureSession; } + // This sets up all the timers InitNewClient(); @@ -726,7 +727,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP } catch (Exception e) { - // ThreadAbortExceptions need to go through unmolested. if (e is ThreadAbortException) throw e; diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequest.cs index 6c341c6..41f230c 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequest.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequest.cs @@ -123,23 +123,9 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver TarArchiveWriter archive = new TarArchiveWriter(); archive.AddFile(ArchiveConstants.PRIMS_PATH, m_serializedEntities); - - // It appears that gtar, at least, doesn't need the intermediate directory entries in the tar - //archive.AddDir("assets"); - - foreach (LLUUID uuid in assets.Keys) - { - if (assets[uuid] != null) - { - archive.AddFile( - ArchiveConstants.TEXTURES_PATH + uuid.ToString() + ArchiveConstants.TEXTURE_EXTENSION, - assets[uuid].Data); - } - else - { - m_log.DebugFormat("[ARCHIVER]: Could not find asset {0} to archive", uuid); - } - } + + AssetsArchiver assetsArchiver = new AssetsArchiver(assets); + assetsArchiver.Archive(archive); archive.WriteTar(m_savePath); diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs new file mode 100644 index 0000000..44757cc --- /dev/null +++ b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs @@ -0,0 +1,129 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Xml; +using libsecondlife; +using log4net; +using OpenSim.Framework; + +namespace OpenSim.Region.Environment.Modules.World.Archiver +{ + /// + /// Archives assets + /// + public class AssetsArchiver + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + /// + /// Archive assets + /// + protected IDictionary m_assets; + + public AssetsArchiver(IDictionary assets) + { + m_assets = assets; + } + + /// + /// Archive the assets given to this archiver to the given archive. + /// + /// + public void Archive(TarArchiveWriter archive) + { + // It appears that gtar, at least, doesn't need the intermediate directory entries in the tar + //archive.AddDir("assets"); + + WriteMetadata(archive); + WriteData(archive); + } + + /// + /// Write an assets metadata file to the given archive + /// + /// + protected void WriteMetadata(TarArchiveWriter archive) + { + StringWriter sw = new StringWriter(); + XmlTextWriter xtw = new XmlTextWriter(sw); + + xtw.Formatting = Formatting.Indented; + xtw.WriteStartDocument(); + + xtw.WriteStartElement("assets"); + + foreach (LLUUID uuid in m_assets.Keys) + { + if (m_assets[uuid] != null) + { + xtw.WriteStartElement("asset"); + + AssetBase asset = m_assets[uuid]; + + xtw.WriteElementString("filename", uuid.ToString() + ArchiveConstants.TEXTURE_EXTENSION); + xtw.WriteElementString("name", asset.Name); + xtw.WriteElementString("description", asset.Description); + xtw.WriteElementString("asset-type", asset.Type.ToString()); + xtw.WriteElementString("inventory-type", asset.InvType.ToString()); + + xtw.WriteEndElement(); + } + + } + + xtw.WriteEndElement(); + + xtw.WriteEndDocument(); + + archive.AddFile("assets.xml", sw.ToString()); + } + + /// + /// Write asset data files to the given archive + /// + /// + protected void WriteData(TarArchiveWriter archive) + { + foreach (LLUUID uuid in m_assets.Keys) + { + if (m_assets[uuid] != null) + { + archive.AddFile( + ArchiveConstants.TEXTURES_PATH + uuid.ToString() + ArchiveConstants.TEXTURE_EXTENSION, + m_assets[uuid].Data); + } + else + { + m_log.DebugFormat("[ARCHIVER]: Could not find asset {0} to archive", uuid); + } + } + } + } +} -- cgit v1.1