diff options
author | Justin Clark-Casey (justincc) | 2011-05-26 01:27:01 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-05-26 01:27:01 +0100 |
commit | 6f4d079fc5b28ef6657fe2baf6ef305a54e674d2 (patch) | |
tree | 2261f22c6978d4bab7366d0b17afb0f6342fcb51 /OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs | |
parent | Revert "Make client event handlers for money only work on root agents" (diff) | |
download | opensim-SC_OLD-6f4d079fc5b28ef6657fe2baf6ef305a54e674d2.zip opensim-SC_OLD-6f4d079fc5b28ef6657fe2baf6ef305a54e674d2.tar.gz opensim-SC_OLD-6f4d079fc5b28ef6657fe2baf6ef305a54e674d2.tar.bz2 opensim-SC_OLD-6f4d079fc5b28ef6657fe2baf6ef305a54e674d2.tar.xz |
Add a --noassets option to "save oar".
This switch stops any assets being saved in the oar.
This can be useful if you're using OAR to backup regions and you know you'll always have the original asset database available.
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs | 81 |
1 files changed, 47 insertions, 34 deletions
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs index 597b780..6a86dfe 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs | |||
@@ -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 oar 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 | |||
147 | foreach (SceneObjectGroup sceneObject in sceneObjects) | ||
148 | { | 146 | { |
149 | assetGatherer.GatherAssetUuids(sceneObject, assetUuids); | 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 | ||
159 | { | ||
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,7 +214,7 @@ 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 = 6; |
210 | // | 220 | // |
@@ -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(); |