diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index 60c34df8bd..f9be1e24a3 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -1294,14 +1294,7 @@ namespace OpenSim
{
try
{
- if (cmdparams.Length > 2)
- {
- m_sceneManager.LoadArchiveToCurrentScene(cmdparams[2]);
- }
- else
- {
- m_sceneManager.LoadArchiveToCurrentScene(DEFAULT_OAR_BACKUP_FILENAME);
- }
+ m_sceneManager.LoadArchiveToCurrentScene(cmdparams);
}
catch (Exception e)
{
@@ -1315,14 +1308,7 @@ namespace OpenSim
///
protected void SaveOar(string module, string[] cmdparams)
{
- if (cmdparams.Length > 2)
- {
- m_sceneManager.SaveCurrentSceneToArchive(cmdparams[2]);
- }
- else
- {
- m_sceneManager.SaveCurrentSceneToArchive(DEFAULT_OAR_BACKUP_FILENAME);
- }
+ m_sceneManager.SaveCurrentSceneToArchive(cmdparams);
}
private static string CombineParams(string[] commandParams, int pos)
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index cc18f1a9ef..391856bbc2 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -75,11 +75,6 @@ namespace OpenSim
///
protected const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.xml";
- ///
- /// The file used to load and save an opensimulator archive if no filename has been specified
- ///
- protected const string DEFAULT_OAR_BACKUP_FILENAME = "region.oar";
-
public ConfigSettings ConfigurationSettings
{
get { return m_configSettings; }
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 07466e2a6c..4221212651 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -8130,8 +8130,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
//lsrp.RequestData.RequestFlags;
//lsrp.RequestData.Filter;
- return true;
+// return true;
}
+
private bool HandleRequestRegionInfo(IClientAPI sender, Packet Pack)
{
RequestRegionInfoPacket.AgentDataBlock mPacket = ((RequestRegionInfoPacket)Pack).AgentData;
@@ -8152,6 +8153,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
return true;
}
+
private bool HandleEstateCovenantRequest(IClientAPI sender, Packet Pack)
{
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index 9e76d79313..8532d03122 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -121,45 +121,51 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
byte[] data;
TarArchiveReader.TarEntryType entryType;
- while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
+
+ try
{
- if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH))
+ while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
{
- if (LoadAsset(filePath, data))
- successfulAssetRestores++;
- else
- failedAssetRestores++;
-
- if ((successfulAssetRestores) % 50 == 0)
- m_log.DebugFormat(
- "[INVENTORY ARCHIVER]: Loaded {0} assets...",
- successfulAssetRestores);
- }
- else if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH))
- {
- InventoryFolderBase foundFolder
- = ReplicateArchivePathToUserInventory(
- filePath, TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType,
- rootDestinationFolder, foldersCreated, nodesLoaded);
-
- if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType)
+ if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH))
{
- InventoryItemBase item = LoadItem(data, foundFolder);
-
- if (item != null)
+ if (LoadAsset(filePath, data))
+ successfulAssetRestores++;
+ else
+ failedAssetRestores++;
+
+ if ((successfulAssetRestores) % 50 == 0)
+ m_log.DebugFormat(
+ "[INVENTORY ARCHIVER]: Loaded {0} assets...",
+ successfulAssetRestores);
+ }
+ else if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH))
+ {
+ InventoryFolderBase foundFolder
+ = ReplicateArchivePathToUserInventory(
+ filePath, TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType,
+ rootDestinationFolder, foldersCreated, nodesLoaded);
+
+ if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType)
{
- successfulItemRestores++;
-
- // If we're loading an item directly into the given destination folder then we need to record
- // it separately from any loaded root folders
- if (rootDestinationFolder == foundFolder)
- nodesLoaded.Add(item);
+ InventoryItemBase item = LoadItem(data, foundFolder);
+
+ if (item != null)
+ {
+ successfulItemRestores++;
+
+ // If we're loading an item directly into the given destination folder then we need to record
+ // it separately from any loaded root folders
+ if (rootDestinationFolder == foundFolder)
+ nodesLoaded.Add(item);
+ }
}
}
}
}
-
- archive.Close();
+ finally
+ {
+ archive.Close();
+ }
m_log.DebugFormat(
"[INVENTORY ARCHIVER]: Successfully loaded {0} assets with {1} failures",
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index 6e11f3625e..c85d974646 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -117,19 +117,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
}
protected void ReceivedAllAssets(ICollection assetsFoundUuids, ICollection assetsNotFoundUuids)
- {
- // We're almost done. Just need to write out the control file now
- m_archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p1ControlFile());
- m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
-
+ {
Exception reportedException = null;
bool succeeded = true;
-
+
try
- {
+ {
+ // We're almost done. Just need to write out the control file now
+ m_archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p1ControlFile());
+ m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
+
m_archiveWriter.Close();
}
- catch (IOException e)
+ catch (Exception e)
{
m_saveStream.Close();
reportedException = e;
@@ -261,39 +261,47 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
//inventoryItem = m_userInfo.RootFolder.FindItemByPath(m_invPath);
}
- m_archiveWriter = new TarArchiveWriter(m_saveStream);
-
- if (inventoryFolder != null)
- {
- m_log.DebugFormat(
- "[INVENTORY ARCHIVER]: Found folder {0} {1} at {2}",
- inventoryFolder.Name, inventoryFolder.ID, m_invPath);
-
- //recurse through all dirs getting dirs and files
- SaveInvFolder(inventoryFolder, ArchiveConstants.INVENTORY_PATH, !foundStar);
- }
- else if (inventoryItem != null)
- {
- m_log.DebugFormat(
- "[INVENTORY ARCHIVER]: Found item {0} {1} at {2}",
- inventoryItem.Name, inventoryItem.ID, m_invPath);
-
- SaveInvItem(inventoryItem, ArchiveConstants.INVENTORY_PATH);
- }
- else
+ if (null == inventoryFolder && null == inventoryItem)
{
// We couldn't find the path indicated
- m_saveStream.Close();
string errorMessage = string.Format("Aborted save. Could not find inventory path {0}", m_invPath);
m_log.ErrorFormat("[INVENTORY ARCHIVER]: {0}", errorMessage);
m_module.TriggerInventoryArchiveSaved(
m_id, false, m_userInfo, m_invPath, m_saveStream,
new Exception(errorMessage));
- return;
+ return;
}
+
+ m_archiveWriter = new TarArchiveWriter(m_saveStream);
- // Don't put all this profile information into the archive right now.
- //SaveUsers();
+ try
+ {
+ if (inventoryFolder != null)
+ {
+ m_log.DebugFormat(
+ "[INVENTORY ARCHIVER]: Found folder {0} {1} at {2}",
+ inventoryFolder.Name, inventoryFolder.ID, m_invPath);
+
+ //recurse through all dirs getting dirs and files
+ SaveInvFolder(inventoryFolder, ArchiveConstants.INVENTORY_PATH, !foundStar);
+ }
+ else if (inventoryItem != null)
+ {
+ m_log.DebugFormat(
+ "[INVENTORY ARCHIVER]: Found item {0} {1} at {2}",
+ inventoryItem.Name, inventoryItem.ID, m_invPath);
+
+ SaveInvItem(inventoryItem, ArchiveConstants.INVENTORY_PATH);
+ }
+
+ // Don't put all this profile information into the archive right now.
+ //SaveUsers();
+ }
+ catch (Exception)
+ {
+ m_archiveWriter.Close();
+ throw;
+ }
new AssetsRequest(
new AssetsArchiver(m_archiveWriter), m_assetUuids.Keys,
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index 1228eb11c9..2c0d11357a 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -92,12 +92,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
scene.AddCommand(
this, "load iar",
"load iar []",
- "Load user inventory archive. EXPERIMENTAL", HandleLoadInvConsoleCommand);
+ "Load user inventory archive.", HandleLoadInvConsoleCommand);
scene.AddCommand(
this, "save iar",
"save iar []",
- "Save user inventory archive. EXPERIMENTAL", HandleSaveInvConsoleCommand);
+ "Save user inventory archive.", HandleSaveInvConsoleCommand);
m_aScene = scene;
}
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
index 70a225e7c1..34b81d809a 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
@@ -103,14 +103,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver
List serialisedSceneObjects = new List();
List serialisedParcels = new List();
string filePath = "NONE";
+
+ TarArchiveReader archive = new TarArchiveReader(m_loadStream);
+ byte[] data;
+ TarArchiveReader.TarEntryType entryType;
try
{
- TarArchiveReader archive = new TarArchiveReader(m_loadStream);
-
- byte[] data;
- TarArchiveReader.TarEntryType entryType;
-
while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
{
//m_log.DebugFormat(
@@ -152,8 +151,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
}
//m_log.Debug("[ARCHIVER]: Reached end of archive");
-
- archive.Close();
}
catch (Exception e)
{
@@ -163,6 +160,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver
m_scene.EventManager.TriggerOarFileLoaded(m_requestId, m_errorMessage);
return;
}
+ finally
+ {
+ archive.Close();
+ }
m_log.InfoFormat("[ARCHIVER]: Restored {0} assets", successfulAssetRestores);
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs
index f039be8238..75c4557d97 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs
@@ -79,6 +79,22 @@ namespace OpenSim.Region.CoreModules.World.Archiver
protected internal void ReceivedAllAssets(
ICollection assetsFoundUuids, ICollection assetsNotFoundUuids)
+ {
+ try
+ {
+ Save(assetsFoundUuids, assetsNotFoundUuids);
+ }
+ finally
+ {
+ m_archiveWriter.Close();
+ }
+
+ m_log.InfoFormat("[ARCHIVER]: Finished writing out OAR for {0}", m_scene.RegionInfo.RegionName);
+
+ m_scene.EventManager.TriggerOarFileSaved(m_requestId, String.Empty);
+ }
+
+ protected internal void Save(ICollection assetsFoundUuids, ICollection assetsNotFoundUuids)
{
foreach (UUID uuid in assetsNotFoundUuids)
{
@@ -143,12 +159,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
}
m_log.InfoFormat("[ARCHIVER]: Added scene objects to archive.");
-
- m_archiveWriter.Close();
-
- m_log.InfoFormat("[ARCHIVER]: Finished writing out OAR for {0}", m_scene.RegionInfo.RegionName);
-
- m_scene.EventManager.TriggerOarFileSaved(m_requestId, String.Empty);
}
///
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
index 9e4fbbe2f8..f08d8eced5 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
@@ -56,6 +56,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
///
/// Constructor
///
+ ///
+ /// The path to which to save data.
+ /// The id associated with this request
+ ///
+ /// If there was a problem opening a stream for the file specified by the savePath
+ ///
public ArchiveWriteRequestPreparation(Scene scene, string savePath, Guid requestId)
{
m_scene = scene;
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
index 8d4f91b159..181f4c66ce 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
@@ -45,6 +45,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver
private Scene m_scene;
+ ///
+ /// The file used to load and save an opensimulator archive if no filename has been specified
+ ///
+ protected const string DEFAULT_OAR_BACKUP_FILENAME = "region.oar";
+
public string Name
{
get { return "RegionArchiverModule"; }
@@ -80,6 +85,38 @@ namespace OpenSim.Region.CoreModules.World.Archiver
{
}
+ ///
+ /// Load a whole region from an opensimulator archive.
+ ///
+ ///
+ public void HandleLoadOarConsoleCommand(string module, string[] cmdparams)
+ {
+ if (cmdparams.Length > 2)
+ {
+ DearchiveRegion(cmdparams[2]);
+ }
+ else
+ {
+ DearchiveRegion(DEFAULT_OAR_BACKUP_FILENAME);
+ }
+ }
+
+ ///
+ /// Save a region to a file, including all the assets needed to restore it.
+ ///
+ ///
+ public void HandleSaveOarConsoleCommand(string module, string[] cmdparams)
+ {
+ if (cmdparams.Length > 2)
+ {
+ ArchiveRegion(cmdparams[2]);
+ }
+ else
+ {
+ ArchiveRegion(DEFAULT_OAR_BACKUP_FILENAME);
+ }
+ }
+
public void ArchiveRegion(string savePath)
{
ArchiveRegion(savePath, Guid.Empty);
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs b/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs
index 9ad2036ff1..1a8babcdaf 100644
--- a/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs
@@ -34,7 +34,10 @@ namespace OpenSim.Region.Framework.Interfaces
/// Interface to region archive functionality
///
public interface IRegionArchiverModule
- {
+ {
+ void HandleLoadOarConsoleCommand(string module, string[] cmdparams);
+ void HandleSaveOarConsoleCommand(string module, string[] cmdparams);
+
///
/// Archive the region to the given path
///
diff --git a/OpenSim/Region/Framework/Scenes/SceneManager.cs b/OpenSim/Region/Framework/Scenes/SceneManager.cs
index dfaa7eae8d..c2e3370eb0 100644
--- a/OpenSim/Region/Framework/Scenes/SceneManager.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneManager.cs
@@ -241,24 +241,24 @@ namespace OpenSim.Region.Framework.Scenes
/// Save the current scene to an OpenSimulator archive. This archive will eventually include the prim's assets
/// as well as the details of the prims themselves.
///
- ///
- public void SaveCurrentSceneToArchive(string filename)
+ ///
+ public void SaveCurrentSceneToArchive(string[] cmdparams)
{
IRegionArchiverModule archiver = CurrentOrFirstScene.RequestModuleInterface();
if (archiver != null)
- archiver.ArchiveRegion(filename);
+ archiver.HandleSaveOarConsoleCommand(string.Empty, cmdparams);
}
///
/// Load an OpenSim archive into the current scene. This will load both the shapes of the prims and upload
/// their assets to the asset service.
///
- ///
- public void LoadArchiveToCurrentScene(string filename)
+ ///
+ public void LoadArchiveToCurrentScene(string[] cmdparams)
{
IRegionArchiverModule archiver = CurrentOrFirstScene.RequestModuleInterface();
if (archiver != null)
- archiver.DearchiveRegion(filename);
+ archiver.HandleLoadOarConsoleCommand(string.Empty, cmdparams);
}
public string SaveCurrentSceneMapToXmlString()
diff --git a/OpenSim/Tools/Compiler/Program.cs b/OpenSim/Tools/Compiler/Program.cs
index b18e029be2..249e18b402 100644
--- a/OpenSim/Tools/Compiler/Program.cs
+++ b/OpenSim/Tools/Compiler/Program.cs
@@ -36,7 +36,8 @@ namespace OpenSim.Tools.LSL.Compiler
{
class Program
{
- private static Dictionary, KeyValuePair> m_positionMap;
+// Commented out because generated warning since m_positionMap could never be anything other than null
+// private static Dictionary, KeyValuePair> m_positionMap;
private static CSharpCodeProvider CScodeProvider = new CSharpCodeProvider();
static void Main(string[] args)
@@ -210,16 +211,16 @@ namespace OpenSim.Tools.LSL.Compiler
sfs.Close();
string posmap = String.Empty;
- if (m_positionMap != null)
- {
- foreach (KeyValuePair, KeyValuePair> kvp in m_positionMap)
- {
- KeyValuePair k = kvp.Key;
- KeyValuePair v = kvp.Value;
- posmap += String.Format("{0},{1},{2},{3}\n",
- k.Key, k.Value, v.Key, v.Value);
- }
- }
+// if (m_positionMap != null)
+// {
+// foreach (KeyValuePair, KeyValuePair> kvp in m_positionMap)
+// {
+// KeyValuePair k = kvp.Key;
+// KeyValuePair v = kvp.Value;
+// posmap += String.Format("{0},{1},{2},{3}\n",
+// k.Key, k.Value, v.Key, v.Value);
+// }
+// }
buf = enc.GetBytes(posmap);
@@ -253,7 +254,8 @@ namespace OpenSim.Tools.LSL.Compiler
private static KeyValuePair FindErrorPosition(int line, int col)
{
- return FindErrorPosition(line, col, m_positionMap);
+ //return FindErrorPosition(line, col, m_positionMap);
+ return FindErrorPosition(line, col, null);
}
private class kvpSorter : IComparer>