aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment')
-rw-r--r--OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs146
-rw-r--r--OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs228
2 files changed, 187 insertions, 187 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs
index 4164cea..3d7273e 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestExecution.cs
@@ -1,73 +1,73 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright 7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright 9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the 12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products 13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission. 14 * derived from this software without specific prior written permission.
15 * 15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY 16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using System.Collections.Generic; 28using System.Collections.Generic;
29using System.Reflection; 29using System.Reflection;
30using libsecondlife; 30using libsecondlife;
31using log4net; 31using log4net;
32using OpenSim.Framework; 32using OpenSim.Framework;
33 33
34namespace OpenSim.Region.Environment.Modules.World.Archiver 34namespace OpenSim.Region.Environment.Modules.World.Archiver
35{ 35{
36 /// <summary> 36 /// <summary>
37 /// Method called when all the necessary assets for an archive request have been received. 37 /// Method called when all the necessary assets for an archive request have been received.
38 /// </summary> 38 /// </summary>
39 public delegate void AssetsRequestCallback(IDictionary<LLUUID, AssetBase> assets); 39 public delegate void AssetsRequestCallback(IDictionary<LLUUID, AssetBase> assets);
40 40
41 /// <summary> 41 /// <summary>
42 /// Execute the write of an archive once we have received all the necessary data 42 /// Execute the write of an archive once we have received all the necessary data
43 /// </summary> 43 /// </summary>
44 public class ArchiveWriteRequestExecution 44 public class ArchiveWriteRequestExecution
45 { 45 {
46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 47
48 protected string m_savePath; 48 protected string m_savePath;
49 protected string m_serializedEntities; 49 protected string m_serializedEntities;
50 50
51 public ArchiveWriteRequestExecution(string serializedEntities, string savePath) 51 public ArchiveWriteRequestExecution(string serializedEntities, string savePath)
52 { 52 {
53 m_serializedEntities = serializedEntities; 53 m_serializedEntities = serializedEntities;
54 m_savePath = savePath; 54 m_savePath = savePath;
55 } 55 }
56 56
57 protected internal void ReceivedAllAssets(IDictionary<LLUUID, AssetBase> assets) 57 protected internal void ReceivedAllAssets(IDictionary<LLUUID, AssetBase> assets)
58 { 58 {
59 m_log.DebugFormat("[ARCHIVER]: Received all {0} assets required", assets.Count); 59 m_log.DebugFormat("[ARCHIVER]: Received all {0} assets required", assets.Count);
60 60
61 TarArchiveWriter archive = new TarArchiveWriter(); 61 TarArchiveWriter archive = new TarArchiveWriter();
62 62
63 archive.AddFile(ArchiveConstants.PRIMS_PATH, m_serializedEntities); 63 archive.AddFile(ArchiveConstants.PRIMS_PATH, m_serializedEntities);
64 64
65 AssetsArchiver assetsArchiver = new AssetsArchiver(assets); 65 AssetsArchiver assetsArchiver = new AssetsArchiver(assets);
66 assetsArchiver.Archive(archive); 66 assetsArchiver.Archive(archive);
67 67
68 archive.WriteTar(m_savePath); 68 archive.WriteTar(m_savePath);
69 69
70 m_log.InfoFormat("[ARCHIVER]: Wrote out OpenSimulator archive {0}", m_savePath); 70 m_log.InfoFormat("[ARCHIVER]: Wrote out OpenSimulator archive {0}", m_savePath);
71 } 71 }
72 } 72 }
73} 73}
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
index f41be49..ebcbcc7 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsRequest.cs
@@ -1,114 +1,114 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright 7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright 9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the 12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products 13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission. 14 * derived from this software without specific prior written permission.
15 * 15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY 16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using OpenSim.Framework; 28using OpenSim.Framework;
29using OpenSim.Framework.Communications.Cache; 29using OpenSim.Framework.Communications.Cache;
30using OpenSim.Region.Environment.Interfaces; 30using OpenSim.Region.Environment.Interfaces;
31using OpenSim.Region.Environment.Scenes; 31using OpenSim.Region.Environment.Scenes;
32using System.Collections.Generic; 32using System.Collections.Generic;
33using System.Threading; 33using System.Threading;
34using libsecondlife; 34using libsecondlife;
35 35
36namespace OpenSim.Region.Environment.Modules.World.Archiver 36namespace OpenSim.Region.Environment.Modules.World.Archiver
37{ 37{
38 /// <summary> 38 /// <summary>
39 /// Encapsulate the asynchronous requests for the assets required for an archive operation 39 /// Encapsulate the asynchronous requests for the assets required for an archive operation
40 /// </summary> 40 /// </summary>
41 class AssetsRequest 41 class AssetsRequest
42 { 42 {
43 /// <summary> 43 /// <summary>
44 /// uuids to request 44 /// uuids to request
45 /// </summary> 45 /// </summary>
46 protected ICollection<LLUUID> m_uuids; 46 protected ICollection<LLUUID> m_uuids;
47 47
48 /// <summary> 48 /// <summary>
49 /// Callback used when all the assets requested have been received. 49 /// Callback used when all the assets requested have been received.
50 /// </summary> 50 /// </summary>
51 protected AssetsRequestCallback m_assetsRequestCallback; 51 protected AssetsRequestCallback m_assetsRequestCallback;
52 52
53 /// <summary> 53 /// <summary>
54 /// Assets retrieved in this request 54 /// Assets retrieved in this request
55 /// </summary> 55 /// </summary>
56 protected Dictionary<LLUUID, AssetBase> m_assets = new Dictionary<LLUUID, AssetBase>(); 56 protected Dictionary<LLUUID, AssetBase> m_assets = new Dictionary<LLUUID, AssetBase>();
57 57
58 /// <summary> 58 /// <summary>
59 /// Record the number of asset replies required so we know when we've finished 59 /// Record the number of asset replies required so we know when we've finished
60 /// </summary> 60 /// </summary>
61 private int m_repliesRequired; 61 private int m_repliesRequired;
62 62
63 /// <summary> 63 /// <summary>
64 /// Asset cache used to request the assets 64 /// Asset cache used to request the assets
65 /// </summary> 65 /// </summary>
66 protected AssetCache m_assetCache; 66 protected AssetCache m_assetCache;
67 67
68 protected internal AssetsRequest(ICollection<LLUUID> uuids, AssetCache assetCache, AssetsRequestCallback assetsRequestCallback) 68 protected internal AssetsRequest(ICollection<LLUUID> uuids, AssetCache assetCache, AssetsRequestCallback assetsRequestCallback)
69 { 69 {
70 m_uuids = uuids; 70 m_uuids = uuids;
71 m_assetsRequestCallback = assetsRequestCallback; 71 m_assetsRequestCallback = assetsRequestCallback;
72 m_assetCache = assetCache; 72 m_assetCache = assetCache;
73 m_repliesRequired = uuids.Count; 73 m_repliesRequired = uuids.Count;
74 } 74 }
75 75
76 protected internal void Execute() 76 protected internal void Execute()
77 { 77 {
78 // We can stop here if there are no assets to fetch 78 // We can stop here if there are no assets to fetch
79 if (m_repliesRequired == 0) 79 if (m_repliesRequired == 0)
80 m_assetsRequestCallback(m_assets); 80 m_assetsRequestCallback(m_assets);
81 81
82 foreach (LLUUID uuid in m_uuids) 82 foreach (LLUUID uuid in m_uuids)
83 { 83 {
84 m_assetCache.GetAsset(uuid, AssetRequestCallback, true); 84 m_assetCache.GetAsset(uuid, AssetRequestCallback, true);
85 } 85 }
86 } 86 }
87 87
88 /// <summary> 88 /// <summary>
89 /// Called back by the asset cache when it has the asset 89 /// Called back by the asset cache when it has the asset
90 /// </summary> 90 /// </summary>
91 /// <param name="assetID"></param> 91 /// <param name="assetID"></param>
92 /// <param name="asset"></param> 92 /// <param name="asset"></param>
93 public void AssetRequestCallback(LLUUID assetID, AssetBase asset) 93 public void AssetRequestCallback(LLUUID assetID, AssetBase asset)
94 { 94 {
95 m_assets[assetID] = asset; 95 m_assets[assetID] = asset;
96 96
97 if (m_assets.Count == m_repliesRequired) 97 if (m_assets.Count == m_repliesRequired)
98 { 98 {
99 // We want to stop using the asset cache thread asap as we now need to do the actual work of producing the archive 99 // We want to stop using the asset cache thread asap as we now need to do the actual work of producing the archive
100 Thread newThread = new Thread(PerformAssetsRequestCallback); 100 Thread newThread = new Thread(PerformAssetsRequestCallback);
101 newThread.Name = "OpenSimulator archiving thread post assets receipt"; 101 newThread.Name = "OpenSimulator archiving thread post assets receipt";
102 newThread.Start(); 102 newThread.Start();
103 } 103 }
104 } 104 }
105 105
106 /// <summary> 106 /// <summary>
107 /// Perform the callback on the original requester of the assets 107 /// Perform the callback on the original requester of the assets
108 /// </summary> 108 /// </summary>
109 protected void PerformAssetsRequestCallback() 109 protected void PerformAssetsRequestCallback()
110 { 110 {
111 m_assetsRequestCallback(m_assets); 111 m_assetsRequestCallback(m_assets);
112 } 112 }
113 } 113 }
114} 114}