aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/World/Archiver
diff options
context:
space:
mode:
authorDr Scofield2009-01-28 09:22:12 +0000
committerDr Scofield2009-01-28 09:22:12 +0000
commita3ac702941bbae92ca5a3ed452eb3d417bf30f0b (patch)
tree3a827866b274b86447cc7b2237a7182d95270879 /OpenSim/Region/Environment/Modules/World/Archiver
parentAdd in a stub for llSHA1String. I believe it is the only one new (diff)
downloadopensim-SC-a3ac702941bbae92ca5a3ed452eb3d417bf30f0b.zip
opensim-SC-a3ac702941bbae92ca5a3ed452eb3d417bf30f0b.tar.gz
opensim-SC-a3ac702941bbae92ca5a3ed452eb3d417bf30f0b.tar.bz2
opensim-SC-a3ac702941bbae92ca5a3ed452eb3d417bf30f0b.tar.xz
From: Christopher Yeoh <yeohc@au1.ibm.com>
Adding Oarfileloaded and EmptyScriptCompileQueue event support which allows (with a module) for programmatic notification of when a region objects and scripts are up and running after a server start or load-oar.
Diffstat (limited to 'OpenSim/Region/Environment/Modules/World/Archiver')
-rw-r--r--OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs92
1 files changed, 55 insertions, 37 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
index ce293e4..ee4323c 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
@@ -53,6 +53,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
53 53
54 private Scene m_scene; 54 private Scene m_scene;
55 private Stream m_loadStream; 55 private Stream m_loadStream;
56 private string m_errorMessage;
56 57
57 /// <summary> 58 /// <summary>
58 /// Used to cache lookups for valid uuids. 59 /// Used to cache lookups for valid uuids.
@@ -63,6 +64,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
63 { 64 {
64 m_scene = scene; 65 m_scene = scene;
65 m_loadStream = new GZipStream(GetStream(loadPath), CompressionMode.Decompress); 66 m_loadStream = new GZipStream(GetStream(loadPath), CompressionMode.Decompress);
67 m_errorMessage = String.Empty;
66 } 68 }
67 69
68 public ArchiveReadRequest(Scene scene, Stream loadStream) 70 public ArchiveReadRequest(Scene scene, Stream loadStream)
@@ -82,62 +84,76 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
82 84
83 private void DearchiveRegion0DotStar() 85 private void DearchiveRegion0DotStar()
84 { 86 {
85 TarArchiveReader archive = new TarArchiveReader(m_loadStream); 87 int successfulAssetRestores = 0;
88 int failedAssetRestores = 0;
89 List<string> serialisedSceneObjects = new List<string>();
86 90
87 //AssetsDearchiver dearchiver = new AssetsDearchiver(m_scene.AssetCache); 91 try
92 {
93 TarArchiveReader archive = new TarArchiveReader(m_loadStream);
88 94
89 List<string> serialisedSceneObjects = new List<string>(); 95 //AssetsDearchiver dearchiver = new AssetsDearchiver(m_scene.AssetCache);
90 string filePath = "ERROR";
91 96
92 int successfulAssetRestores = 0; 97 string filePath = "ERROR";
93 int failedAssetRestores = 0;
94 98
95 byte[] data; 99 byte[] data;
96 TarArchiveReader.TarEntryType entryType; 100 TarArchiveReader.TarEntryType entryType;
97 101
98 while ((data = archive.ReadEntry(out filePath, out entryType)) != null) 102 while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
99 {
100 //m_log.DebugFormat(
101 // "[ARCHIVER]: Successfully read {0} ({1} bytes)}", filePath, data.Length);
102 if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType)
103 { 103 {
104 m_log.WarnFormat("[ARCHIVER]: Ignoring directory entry {0}", 104 //m_log.DebugFormat(
105 filePath); 105 // "[ARCHIVER]: Successfully read {0} ({1} bytes)}", filePath, data.Length);
106 } 106 if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType)
107 else if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH)) 107 {
108 { 108 m_log.WarnFormat("[ARCHIVER]: Ignoring directory entry {0}",
109 serialisedSceneObjects.Add(m_asciiEncoding.GetString(data)); 109 filePath);
110 } 110 }
111 else if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH))
112 {
113 serialisedSceneObjects.Add(m_asciiEncoding.GetString(data));
114 }
111// else if (filePath.Equals(ArchiveConstants.ASSETS_METADATA_PATH)) 115// else if (filePath.Equals(ArchiveConstants.ASSETS_METADATA_PATH))
112// { 116// {
113// string xml = m_asciiEncoding.GetString(data); 117// string xml = m_asciiEncoding.GetString(data);
114// dearchiver.AddAssetMetadata(xml); 118// dearchiver.AddAssetMetadata(xml);
115// } 119// }
116 else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) 120 else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH))
117 { 121 {
118 if (LoadAsset(filePath, data)) 122 if (LoadAsset(filePath, data))
119 successfulAssetRestores++; 123 successfulAssetRestores++;
120 else 124 else
121 failedAssetRestores++; 125 failedAssetRestores++;
122 } 126 }
123 else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH)) 127 else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH))
124 { 128 {
125 LoadTerrain(filePath, data); 129 LoadTerrain(filePath, data);
126 } 130 }
127 else if (filePath.StartsWith(ArchiveConstants.SETTINGS_PATH)) 131 else if (filePath.StartsWith(ArchiveConstants.SETTINGS_PATH))
128 { 132 {
129 LoadRegionSettings(filePath, data); 133 LoadRegionSettings(filePath, data);
134 }
130 } 135 }
131 }
132 136
133 //m_log.Debug("[ARCHIVER]: Reached end of archive"); 137 //m_log.Debug("[ARCHIVER]: Reached end of archive");
134 138
135 archive.Close(); 139 archive.Close();
140 }
141 catch (Exception e)
142 {
143 m_log.ErrorFormat(
144 "[ARCHIVER]: Error loading oar file. Exception was: {0}", e);
145 m_errorMessage += e.ToString();
146 m_scene.EventManager.TriggerOarFileLoaded(m_errorMessage);
147 return;
148 }
136 149
137 m_log.InfoFormat("[ARCHIVER]: Restored {0} assets", successfulAssetRestores); 150 m_log.InfoFormat("[ARCHIVER]: Restored {0} assets", successfulAssetRestores);
138 151
139 if (failedAssetRestores > 0) 152 if (failedAssetRestores > 0)
153 {
140 m_log.ErrorFormat("[ARCHIVER]: Failed to load {0} assets", failedAssetRestores); 154 m_log.ErrorFormat("[ARCHIVER]: Failed to load {0} assets", failedAssetRestores);
155 m_errorMessage += String.Format("Failed to load {0} assets", failedAssetRestores);
156 }
141 157
142 m_log.Info("[ARCHIVER]: Clearing all existing scene objects"); 158 m_log.Info("[ARCHIVER]: Clearing all existing scene objects");
143 m_scene.DeleteAllSceneObjects(); 159 m_scene.DeleteAllSceneObjects();
@@ -217,6 +233,8 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
217 { 233 {
218 sceneObject.CreateScriptInstances(0, true, m_scene.DefaultScriptEngine, 0); 234 sceneObject.CreateScriptInstances(0, true, m_scene.DefaultScriptEngine, 0);
219 } 235 }
236 m_scene.EventManager.TriggerOarFileLoaded(m_errorMessage);
237
220 } 238 }
221 239
222 /// <summary> 240 /// <summary>