diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs | 85 |
1 files changed, 49 insertions, 36 deletions
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs index 597b780..10a83ee 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs | |||
@@ -49,7 +49,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
49 | public class ArchiveWriteRequestPreparation | 49 | public class ArchiveWriteRequestPreparation |
50 | { | 50 | { |
51 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 51 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
52 | 52 | ||
53 | /// <summary> | 53 | /// <summary> |
54 | /// The minimum major version of OAR that we can write. | 54 | /// The minimum major version of OAR that we can write. |
55 | /// </summary> | 55 | /// </summary> |
@@ -58,7 +58,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
58 | /// <summary> | 58 | /// <summary> |
59 | /// The maximum major version of OAR that we can write. | 59 | /// The maximum major version of OAR that we can write. |
60 | /// </summary> | 60 | /// </summary> |
61 | public static int MAX_MAJOR_VERSION = 0; | 61 | public static int MAX_MAJOR_VERSION = 0; |
62 | |||
63 | /// <summary> | ||
64 | /// Determine whether this archive will save assets. Default is true. | ||
65 | /// </summary> | ||
66 | public bool SaveAssets { get; set; } | ||
62 | 67 | ||
63 | protected Scene m_scene; | 68 | protected Scene m_scene; |
64 | protected Stream m_saveStream; | 69 | protected Stream m_saveStream; |
@@ -73,10 +78,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
73 | /// <exception cref="System.IO.IOException"> | 78 | /// <exception cref="System.IO.IOException"> |
74 | /// If there was a problem opening a stream for the file specified by the savePath | 79 | /// If there was a problem opening a stream for the file specified by the savePath |
75 | /// </exception> | 80 | /// </exception> |
76 | public ArchiveWriteRequestPreparation(Scene scene, string savePath, Guid requestId) | 81 | public ArchiveWriteRequestPreparation(Scene scene, string savePath, Guid requestId) : this(scene, requestId) |
77 | { | 82 | { |
78 | m_scene = scene; | ||
79 | |||
80 | try | 83 | try |
81 | { | 84 | { |
82 | m_saveStream = new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress); | 85 | m_saveStream = new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress); |
@@ -86,10 +89,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
86 | m_log.ErrorFormat( | 89 | m_log.ErrorFormat( |
87 | "[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream." | 90 | "[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream." |
88 | + "If you've manually installed Mono, have you appropriately updated zlib1g as well?"); | 91 | + "If you've manually installed Mono, have you appropriately updated zlib1g as well?"); |
89 | m_log.Error(e); | 92 | m_log.ErrorFormat("{0} {1}", e.Message, e.StackTrace); |
90 | } | 93 | } |
91 | |||
92 | m_requestId = requestId; | ||
93 | } | 94 | } |
94 | 95 | ||
95 | /// <summary> | 96 | /// <summary> |
@@ -98,11 +99,17 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
98 | /// <param name="scene"></param> | 99 | /// <param name="scene"></param> |
99 | /// <param name="saveStream">The stream to which to save data.</param> | 100 | /// <param name="saveStream">The stream to which to save data.</param> |
100 | /// <param name="requestId">The id associated with this request</param> | 101 | /// <param name="requestId">The id associated with this request</param> |
101 | public ArchiveWriteRequestPreparation(Scene scene, Stream saveStream, Guid requestId) | 102 | public ArchiveWriteRequestPreparation(Scene scene, Stream saveStream, Guid requestId) : this(scene, requestId) |
102 | { | 103 | { |
103 | m_scene = scene; | ||
104 | m_saveStream = saveStream; | 104 | m_saveStream = saveStream; |
105 | } | ||
106 | |||
107 | protected ArchiveWriteRequestPreparation(Scene scene, Guid requestId) | ||
108 | { | ||
109 | m_scene = scene; | ||
105 | m_requestId = requestId; | 110 | m_requestId = requestId; |
111 | |||
112 | SaveAssets = true; | ||
106 | } | 113 | } |
107 | 114 | ||
108 | /// <summary> | 115 | /// <summary> |
@@ -111,22 +118,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
111 | /// <exception cref="System.IO.IOException">if there was an io problem with creating the file</exception> | 118 | /// <exception cref="System.IO.IOException">if there was an io problem with creating the file</exception> |
112 | public void ArchiveRegion(Dictionary<string, object> options) | 119 | public void ArchiveRegion(Dictionary<string, object> options) |
113 | { | 120 | { |
121 | if (options.ContainsKey("noassets") && (bool)options["noassets"]) | ||
122 | SaveAssets = false; | ||
123 | |||
114 | try | 124 | try |
115 | { | 125 | { |
116 | Dictionary<UUID, AssetType> assetUuids = new Dictionary<UUID, AssetType>(); | 126 | Dictionary<UUID, AssetType> assetUuids = new Dictionary<UUID, AssetType>(); |
117 | 127 | ||
118 | EntityBase[] entities = m_scene.GetEntities(); | 128 | EntityBase[] entities = m_scene.GetEntities(); |
119 | List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>(); | 129 | List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>(); |
120 | |||
121 | /* | ||
122 | foreach (ILandObject lo in m_scene.LandChannel.AllParcels()) | ||
123 | { | ||
124 | if (name == lo.LandData.Name) | ||
125 | { | ||
126 | // This is the parcel we want | ||
127 | } | ||
128 | } | ||
129 | */ | ||
130 | 130 | ||
131 | // Filter entities so that we only have scene objects. | 131 | // Filter entities so that we only have scene objects. |
132 | // FIXME: Would be nicer to have this as a proper list in SceneGraph, since lots of methods | 132 | // FIXME: Would be nicer to have this as a proper list in SceneGraph, since lots of methods |
@@ -141,17 +141,24 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
141 | sceneObjects.Add((SceneObjectGroup)entity); | 141 | sceneObjects.Add((SceneObjectGroup)entity); |
142 | } | 142 | } |
143 | } | 143 | } |
144 | 144 | ||
145 | UuidGatherer assetGatherer = new UuidGatherer(m_scene.AssetService); | 145 | if (SaveAssets) |
146 | 146 | { | |
147 | foreach (SceneObjectGroup sceneObject in sceneObjects) | 147 | UuidGatherer assetGatherer = new UuidGatherer(m_scene.AssetService); |
148 | |||
149 | foreach (SceneObjectGroup sceneObject in sceneObjects) | ||
150 | { | ||
151 | assetGatherer.GatherAssetUuids(sceneObject, assetUuids); | ||
152 | } | ||
153 | |||
154 | m_log.DebugFormat( | ||
155 | "[ARCHIVER]: {0} scene objects to serialize requiring save of {1} assets", | ||
156 | sceneObjects.Count, assetUuids.Count); | ||
157 | } | ||
158 | else | ||
148 | { | 159 | { |
149 | assetGatherer.GatherAssetUuids(sceneObject, assetUuids); | 160 | m_log.DebugFormat("[ARCHIVER]: Not saving assets since --noassets was specified"); |
150 | } | 161 | } |
151 | |||
152 | m_log.DebugFormat( | ||
153 | "[ARCHIVER]: {0} scene objects to serialize requiring save of {1} assets", | ||
154 | sceneObjects.Count, assetUuids.Count); | ||
155 | 162 | ||
156 | // Make sure that we also request terrain texture assets | 163 | // Make sure that we also request terrain texture assets |
157 | RegionSettings regionSettings = m_scene.RegionInfo.RegionSettings; | 164 | RegionSettings regionSettings = m_scene.RegionInfo.RegionSettings; |
@@ -187,11 +194,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
187 | // XXX: I know this is a weak way of doing it since external non-OAR aware tar executables will not do this | 194 | // XXX: I know this is a weak way of doing it since external non-OAR aware tar executables will not do this |
188 | archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, CreateControlFile(options)); | 195 | archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, CreateControlFile(options)); |
189 | m_log.InfoFormat("[ARCHIVER]: Added control file to archive."); | 196 | m_log.InfoFormat("[ARCHIVER]: Added control file to archive."); |
190 | 197 | ||
191 | new AssetsRequest( | 198 | if (SaveAssets) |
192 | new AssetsArchiver(archiveWriter), assetUuids, | 199 | new AssetsRequest( |
193 | m_scene.AssetService, m_scene.UserAccountService, | 200 | new AssetsArchiver(archiveWriter), assetUuids, |
194 | m_scene.RegionInfo.ScopeID, options, awre.ReceivedAllAssets).Execute(); | 201 | m_scene.AssetService, m_scene.UserAccountService, |
202 | m_scene.RegionInfo.ScopeID, options, awre.ReceivedAllAssets).Execute(); | ||
203 | else | ||
204 | awre.ReceivedAllAssets(new List<UUID>(), new List<UUID>()); | ||
195 | } | 205 | } |
196 | catch (Exception) | 206 | catch (Exception) |
197 | { | 207 | { |
@@ -204,9 +214,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
204 | /// Create the control file for the most up to date archive | 214 | /// Create the control file for the most up to date archive |
205 | /// </summary> | 215 | /// </summary> |
206 | /// <returns></returns> | 216 | /// <returns></returns> |
207 | public static string CreateControlFile(Dictionary<string, object> options) | 217 | public string CreateControlFile(Dictionary<string, object> options) |
208 | { | 218 | { |
209 | int majorVersion = MAX_MAJOR_VERSION, minorVersion = 6; | 219 | int majorVersion = MAX_MAJOR_VERSION, minorVersion = 7; |
210 | // | 220 | // |
211 | // if (options.ContainsKey("version")) | 221 | // if (options.ContainsKey("version")) |
212 | // { | 222 | // { |
@@ -258,6 +268,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
258 | xtw.WriteElementString("datetime", ((int)t.TotalSeconds).ToString()); | 268 | xtw.WriteElementString("datetime", ((int)t.TotalSeconds).ToString()); |
259 | xtw.WriteElementString("id", UUID.Random().ToString()); | 269 | xtw.WriteElementString("id", UUID.Random().ToString()); |
260 | xtw.WriteEndElement(); | 270 | xtw.WriteEndElement(); |
271 | |||
272 | xtw.WriteElementString("assets_included", SaveAssets.ToString()); | ||
273 | |||
261 | xtw.WriteEndElement(); | 274 | xtw.WriteEndElement(); |
262 | 275 | ||
263 | xtw.Flush(); | 276 | xtw.Flush(); |