aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-05-26 01:27:01 +0100
committerJustin Clark-Casey (justincc)2011-05-26 01:27:01 +0100
commit6f4d079fc5b28ef6657fe2baf6ef305a54e674d2 (patch)
tree2261f22c6978d4bab7366d0b17afb0f6342fcb51 /OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
parentRevert "Make client event handlers for money only work on root agents" (diff)
downloadopensim-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.cs81
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();