aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-03-15 21:53:39 +0000
committerJustin Clark-Casey (justincc)2013-03-15 21:53:39 +0000
commit924d6e892a7b5a61e900b910a5a35de488963529 (patch)
tree90a557f03dba4e61444cc2b3708cc808b25f6442 /OpenSim
parentAdd example code to DOExampleModule to pull data from that previously saved b... (diff)
downloadopensim-SC_OLD-924d6e892a7b5a61e900b910a5a35de488963529.zip
opensim-SC_OLD-924d6e892a7b5a61e900b910a5a35de488963529.tar.gz
opensim-SC_OLD-924d6e892a7b5a61e900b910a5a35de488963529.tar.bz2
opensim-SC_OLD-924d6e892a7b5a61e900b910a5a35de488963529.tar.xz
Make it possible to chain another asset service underneath the de-duplicating XAssetService.
This makes it possible to use the dedupliicating service without needing to migrate all the existing asset data beforehand. Currently controlled by a ChainedServiceModule setting in [AssetService] (e.g. ChainedServiceModule = "OpenSim.Services.AssetService.dll:AssetService") Not yet ready for use.
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Services/AssetService/XAssetService.cs51
-rw-r--r--OpenSim/Services/AssetService/XAssetServiceBase.cs47
2 files changed, 75 insertions, 23 deletions
diff --git a/OpenSim/Services/AssetService/XAssetService.cs b/OpenSim/Services/AssetService/XAssetService.cs
index a1d10ed..7dd48c9 100644
--- a/OpenSim/Services/AssetService/XAssetService.cs
+++ b/OpenSim/Services/AssetService/XAssetService.cs
@@ -39,8 +39,7 @@ using OpenMetaverse;
39namespace OpenSim.Services.AssetService 39namespace OpenSim.Services.AssetService
40{ 40{
41 /// <summary> 41 /// <summary>
42 /// This will be developed into a de-duplicating asset service. 42 /// A de-duplicating asset service.
43 /// XXX: Currently it's a just a copy of the existing AssetService. so please don't attempt to use it.
44 /// </summary> 43 /// </summary>
45 public class XAssetService : XAssetServiceBase, IAssetService 44 public class XAssetService : XAssetServiceBase, IAssetService
46 { 45 {
@@ -48,7 +47,9 @@ namespace OpenSim.Services.AssetService
48 47
49 protected static XAssetService m_RootInstance; 48 protected static XAssetService m_RootInstance;
50 49
51 public XAssetService(IConfigSource config) : base(config) 50 public XAssetService(IConfigSource config) : this(config, "AssetService") {}
51
52 public XAssetService(IConfigSource config, string configName) : base(config, configName)
52 { 53 {
53 if (m_RootInstance == null) 54 if (m_RootInstance == null)
54 { 55 {
@@ -56,22 +57,21 @@ namespace OpenSim.Services.AssetService
56 57
57 if (m_AssetLoader != null) 58 if (m_AssetLoader != null)
58 { 59 {
59 IConfig assetConfig = config.Configs["AssetService"]; 60 IConfig assetConfig = config.Configs[configName];
60 if (assetConfig == null) 61 if (assetConfig == null)
61 throw new Exception("No AssetService configuration"); 62 throw new Exception("No AssetService configuration");
62 63
63 string loaderArgs = assetConfig.GetString("AssetLoaderArgs", 64 string loaderArgs = assetConfig.GetString("AssetLoaderArgs", String.Empty);
64 String.Empty);
65 65
66 bool assetLoaderEnabled = assetConfig.GetBoolean("AssetLoaderEnabled", true); 66 bool assetLoaderEnabled = assetConfig.GetBoolean("AssetLoaderEnabled", true);
67 67
68 if (assetLoaderEnabled) 68 if (assetLoaderEnabled && !HasChainedAssetService)
69 { 69 {
70 m_log.DebugFormat("[XASSET SERVICE]: Loading default asset set from {0}", loaderArgs); 70 m_log.DebugFormat("[XASSET SERVICE]: Loading default asset set from {0}", loaderArgs);
71 71
72 m_AssetLoader.ForEachDefaultXmlAsset( 72 m_AssetLoader.ForEachDefaultXmlAsset(
73 loaderArgs, 73 loaderArgs,
74 delegate(AssetBase a) 74 a =>
75 { 75 {
76 AssetBase existingAsset = Get(a.ID); 76 AssetBase existingAsset = Get(a.ID);
77// AssetMetadata existingMetadata = GetMetadata(a.ID); 77// AssetMetadata existingMetadata = GetMetadata(a.ID);
@@ -103,7 +103,14 @@ namespace OpenSim.Services.AssetService
103 103
104 try 104 try
105 { 105 {
106 return m_Database.GetAsset(assetID); 106 AssetBase asset = m_Database.GetAsset(assetID);
107
108 if (asset != null)
109 return asset;
110 else if (HasChainedAssetService)
111 return m_ChainedAssetService.Get(id);
112 else
113 return null;
107 } 114 }
108 catch (Exception e) 115 catch (Exception e)
109 { 116 {
@@ -128,9 +135,17 @@ namespace OpenSim.Services.AssetService
128 135
129 AssetBase asset = m_Database.GetAsset(assetID); 136 AssetBase asset = m_Database.GetAsset(assetID);
130 if (asset != null) 137 if (asset != null)
138 {
131 return asset.Metadata; 139 return asset.Metadata;
132 140 }
133 return null; 141 else if (HasChainedAssetService)
142 {
143 return m_ChainedAssetService.GetMetadata(id);
144 }
145 else
146 {
147 return null;
148 }
134 } 149 }
135 150
136 public virtual byte[] GetData(string id) 151 public virtual byte[] GetData(string id)
@@ -143,7 +158,13 @@ namespace OpenSim.Services.AssetService
143 return null; 158 return null;
144 159
145 AssetBase asset = m_Database.GetAsset(assetID); 160 AssetBase asset = m_Database.GetAsset(assetID);
146 return asset.Data; 161
162 if (asset != null)
163 return asset.Data;
164 else if (HasChainedAssetService)
165 return m_ChainedAssetService.GetData(id);
166 else
167 return null;
147 } 168 }
148 169
149 public virtual bool Get(string id, Object sender, AssetRetrieved handler) 170 public virtual bool Get(string id, Object sender, AssetRetrieved handler)
@@ -157,6 +178,9 @@ namespace OpenSim.Services.AssetService
157 178
158 AssetBase asset = m_Database.GetAsset(assetID); 179 AssetBase asset = m_Database.GetAsset(assetID);
159 180
181 if (asset == null && HasChainedAssetService)
182 asset = m_ChainedAssetService.Get(id);
183
160 //m_log.DebugFormat("[XASSET SERVICE]: Got asset {0}", asset); 184 //m_log.DebugFormat("[XASSET SERVICE]: Got asset {0}", asset);
161 185
162 handler(id, sender, asset); 186 handler(id, sender, asset);
@@ -194,6 +218,9 @@ namespace OpenSim.Services.AssetService
194 if (!UUID.TryParse(id, out assetID)) 218 if (!UUID.TryParse(id, out assetID))
195 return false; 219 return false;
196 220
221 // Don't bother deleting from a chained asset service. This isn't a big deal since deleting happens
222 // very rarely.
223
197 return m_Database.Delete(id); 224 return m_Database.Delete(id);
198 } 225 }
199 } 226 }
diff --git a/OpenSim/Services/AssetService/XAssetServiceBase.cs b/OpenSim/Services/AssetService/XAssetServiceBase.cs
index 0c5c2c3..c118c9d 100644
--- a/OpenSim/Services/AssetService/XAssetServiceBase.cs
+++ b/OpenSim/Services/AssetService/XAssetServiceBase.cs
@@ -27,9 +27,11 @@
27 27
28using System; 28using System;
29using System.Reflection; 29using System.Reflection;
30using log4net;
30using Nini.Config; 31using Nini.Config;
31using OpenSim.Framework; 32using OpenSim.Framework;
32using OpenSim.Data; 33using OpenSim.Data;
34using OpenSim.Server.Base;
33using OpenSim.Services.Interfaces; 35using OpenSim.Services.Interfaces;
34using OpenSim.Services.Base; 36using OpenSim.Services.Base;
35 37
@@ -37,10 +39,15 @@ namespace OpenSim.Services.AssetService
37{ 39{
38 public class XAssetServiceBase : ServiceBase 40 public class XAssetServiceBase : ServiceBase
39 { 41 {
40 protected IXAssetDataPlugin m_Database = null; 42 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
41 protected IAssetLoader m_AssetLoader = null;
42 43
43 public XAssetServiceBase(IConfigSource config) : base(config) 44 protected IXAssetDataPlugin m_Database;
45 protected IAssetLoader m_AssetLoader;
46 protected IAssetService m_ChainedAssetService;
47
48 protected bool HasChainedAssetService { get { return m_ChainedAssetService != null; } }
49
50 public XAssetServiceBase(IConfigSource config, string configName) : base(config)
44 { 51 {
45 string dllName = String.Empty; 52 string dllName = String.Empty;
46 string connString = String.Empty; 53 string connString = String.Empty;
@@ -48,7 +55,7 @@ namespace OpenSim.Services.AssetService
48 // 55 //
49 // Try reading the [AssetService] section first, if it exists 56 // Try reading the [AssetService] section first, if it exists
50 // 57 //
51 IConfig assetConfig = config.Configs["AssetService"]; 58 IConfig assetConfig = config.Configs[configName];
52 if (assetConfig != null) 59 if (assetConfig != null)
53 { 60 {
54 dllName = assetConfig.GetString("StorageProvider", dllName); 61 dllName = assetConfig.GetString("StorageProvider", dllName);
@@ -77,17 +84,35 @@ namespace OpenSim.Services.AssetService
77 if (m_Database == null) 84 if (m_Database == null)
78 throw new Exception("Could not find a storage interface in the given module"); 85 throw new Exception("Could not find a storage interface in the given module");
79 86
80 m_Database.Initialise(connString); 87 string chainedAssetServiceDesignator = assetConfig.GetString("ChainedServiceModule", null);
88
89 if (chainedAssetServiceDesignator != null)
90 {
91 m_log.InfoFormat(
92 "[XASSET SERVICE BASE]: Loading chained asset service from {0}", chainedAssetServiceDesignator);
81 93
82 string loaderName = assetConfig.GetString("DefaultAssetLoader", 94 Object[] args = new Object[] { config, configName };
83 String.Empty); 95 m_ChainedAssetService = ServerUtils.LoadPlugin<IAssetService>(chainedAssetServiceDesignator, args);
84 96
85 if (loaderName != String.Empty) 97 if (!HasChainedAssetService)
98 throw new Exception(
99 String.Format("Failed to load ChainedAssetService from {0}", chainedAssetServiceDesignator));
100 }
101
102 m_Database.Initialise(connString);
103
104 if (HasChainedAssetService)
86 { 105 {
87 m_AssetLoader = LoadPlugin<IAssetLoader>(loaderName); 106 string loaderName = assetConfig.GetString("DefaultAssetLoader",
107 String.Empty);
108
109 if (loaderName != String.Empty)
110 {
111 m_AssetLoader = LoadPlugin<IAssetLoader>(loaderName);
88 112
89 if (m_AssetLoader == null) 113 if (m_AssetLoader == null)
90 throw new Exception("Asset loader could not be loaded"); 114 throw new Exception("Asset loader could not be loaded");
115 }
91 } 116 }
92 } 117 }
93 } 118 }