diff options
Diffstat (limited to '')
3 files changed, 86 insertions, 20 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs index d221d68..7fcfc74 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/HGAssetBroker.cs | |||
@@ -69,6 +69,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
69 | get { return "HGAssetBroker"; } | 69 | get { return "HGAssetBroker"; } |
70 | } | 70 | } |
71 | 71 | ||
72 | public HGAssetBroker() {} | ||
73 | |||
74 | public HGAssetBroker(IConfigSource config) | ||
75 | { | ||
76 | Initialise(config); | ||
77 | } | ||
78 | |||
72 | public void Initialise(IConfigSource source) | 79 | public void Initialise(IConfigSource source) |
73 | { | 80 | { |
74 | IConfig moduleConfig = source.Configs["Modules"]; | 81 | IConfig moduleConfig = source.Configs["Modules"]; |
@@ -288,7 +295,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
288 | 295 | ||
289 | if (asset != null) | 296 | if (asset != null) |
290 | { | 297 | { |
291 | Util.FireAndForget(delegate { handler(id, sender, asset); }); | 298 | Util.FireAndForget(delegate { handler(id, sender, asset); }, null, "HGAssetBroker.GotFromCache"); |
292 | return true; | 299 | return true; |
293 | } | 300 | } |
294 | 301 | ||
@@ -312,6 +319,23 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
312 | } | 319 | } |
313 | } | 320 | } |
314 | 321 | ||
322 | public virtual bool[] AssetsExist(string[] ids) | ||
323 | { | ||
324 | int numHG = 0; | ||
325 | foreach (string id in ids) | ||
326 | { | ||
327 | if (IsHG(id)) | ||
328 | ++numHG; | ||
329 | } | ||
330 | |||
331 | if (numHG == 0) | ||
332 | return m_GridService.AssetsExist(ids); | ||
333 | else if (numHG == ids.Length) | ||
334 | return m_HGService.AssetsExist(ids); | ||
335 | else | ||
336 | throw new Exception("[HG ASSET CONNECTOR]: AssetsExist: all the assets must be either local or foreign"); | ||
337 | } | ||
338 | |||
315 | public string Store(AssetBase asset) | 339 | public string Store(AssetBase asset) |
316 | { | 340 | { |
317 | bool isHG = IsHG(asset.ID); | 341 | bool isHG = IsHG(asset.ID); |
@@ -322,14 +346,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
322 | // a copy of the local asset. | 346 | // a copy of the local asset. |
323 | m_Cache.Cache(asset); | 347 | m_Cache.Cache(asset); |
324 | 348 | ||
325 | if (asset.Temporary || asset.Local) | 349 | if (asset.Local) |
326 | { | 350 | { |
327 | if (m_Cache != null) | 351 | if (m_Cache != null) |
328 | m_Cache.Cache(asset); | 352 | m_Cache.Cache(asset); |
329 | return asset.ID; | 353 | return asset.ID; |
330 | } | 354 | } |
331 | 355 | ||
332 | string id = string.Empty; | 356 | string id; |
333 | if (IsHG(asset.ID)) | 357 | if (IsHG(asset.ID)) |
334 | { | 358 | { |
335 | if (m_AssetPerms.AllowedExport(asset.Type)) | 359 | if (m_AssetPerms.AllowedExport(asset.Type)) |
@@ -340,18 +364,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
340 | else | 364 | else |
341 | id = m_GridService.Store(asset); | 365 | id = m_GridService.Store(asset); |
342 | 366 | ||
343 | if (id != String.Empty) | 367 | if (String.IsNullOrEmpty(id)) |
344 | { | 368 | return string.Empty; |
345 | // Placing this here, so that this work with old asset servers that don't send any reply back | 369 | |
346 | // SynchronousRestObjectRequester returns somethins that is not an empty string | 370 | asset.ID = id; |
347 | if (id != null) | ||
348 | asset.ID = id; | ||
349 | 371 | ||
350 | if (m_Cache != null) | 372 | if (m_Cache != null) |
351 | m_Cache.Cache(asset); | 373 | m_Cache.Cache(asset); |
352 | } | ||
353 | return id; | ||
354 | 374 | ||
375 | return id; | ||
355 | } | 376 | } |
356 | 377 | ||
357 | public bool UpdateContent(string id, byte[] data) | 378 | public bool UpdateContent(string id, byte[] data) |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs index 480cd69..5f34450 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs | |||
@@ -236,7 +236,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
236 | 236 | ||
237 | if (asset != null) | 237 | if (asset != null) |
238 | { | 238 | { |
239 | Util.FireAndForget(delegate { handler(id, sender, asset); }); | 239 | Util.FireAndForget( |
240 | o => handler(id, sender, asset), null, "LocalAssetServiceConnector.GotFromCacheCallback"); | ||
240 | return true; | 241 | return true; |
241 | } | 242 | } |
242 | } | 243 | } |
@@ -249,16 +250,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset | |||
249 | // if (null == a) | 250 | // if (null == a) |
250 | // m_log.WarnFormat("[LOCAL ASSET SERVICES CONNECTOR]: Could not asynchronously find asset with id {0}", id); | 251 | // m_log.WarnFormat("[LOCAL ASSET SERVICES CONNECTOR]: Could not asynchronously find asset with id {0}", id); |
251 | 252 | ||
252 | Util.FireAndForget(delegate { handler(assetID, s, a); }); | 253 | Util.FireAndForget( |
254 | o => handler(assetID, s, a), null, "LocalAssetServiceConnector.GotFromServiceCallback"); | ||
253 | }); | 255 | }); |
254 | } | 256 | } |
255 | 257 | ||
258 | public bool[] AssetsExist(string[] ids) | ||
259 | { | ||
260 | return m_AssetService.AssetsExist(ids); | ||
261 | } | ||
262 | |||
256 | public string Store(AssetBase asset) | 263 | public string Store(AssetBase asset) |
257 | { | 264 | { |
258 | if (m_Cache != null) | 265 | if (m_Cache != null) |
259 | m_Cache.Cache(asset); | 266 | m_Cache.Cache(asset); |
260 | 267 | ||
261 | if (asset.Temporary || asset.Local) | 268 | if (asset.Local) |
262 | { | 269 | { |
263 | // m_log.DebugFormat( | 270 | // m_log.DebugFormat( |
264 | // "[LOCAL ASSET SERVICE CONNECTOR]: Returning asset {0} {1} without querying database since status Temporary = {2}, Local = {3}", | 271 | // "[LOCAL ASSET SERVICE CONNECTOR]: Returning asset {0} {1} without querying database since status Temporary = {2}, Local = {3}", |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/Tests/AssetConnectorTests.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/Tests/AssetConnectorTests.cs index 1982473..4f75191 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/Tests/AssetConnectorTests.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/Tests/AssetConnectorTests.cs | |||
@@ -42,7 +42,7 @@ using OpenSim.Tests.Common; | |||
42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.Tests | 42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.Tests |
43 | { | 43 | { |
44 | [TestFixture] | 44 | [TestFixture] |
45 | public class AssetConnectorsTests : OpenSimTestCase | 45 | public class AssetConnectorTests : OpenSimTestCase |
46 | { | 46 | { |
47 | [Test] | 47 | [Test] |
48 | public void TestAddAsset() | 48 | public void TestAddAsset() |
@@ -77,7 +77,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.Tests | |||
77 | // TODO: Add cache and check that this does receive a copy of the asset | 77 | // TODO: Add cache and check that this does receive a copy of the asset |
78 | } | 78 | } |
79 | 79 | ||
80 | [Test] | ||
81 | public void TestAddTemporaryAsset() | 80 | public void TestAddTemporaryAsset() |
82 | { | 81 | { |
83 | TestHelpers.InMethod(); | 82 | TestHelpers.InMethod(); |
@@ -93,8 +92,45 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.Tests | |||
93 | LocalAssetServicesConnector lasc = new LocalAssetServicesConnector(); | 92 | LocalAssetServicesConnector lasc = new LocalAssetServicesConnector(); |
94 | lasc.Initialise(config); | 93 | lasc.Initialise(config); |
95 | 94 | ||
95 | // If it is remote, it should be stored | ||
96 | AssetBase a2 = AssetHelpers.CreateNotecardAsset(); | ||
97 | a2.Local = false; | ||
98 | a2.Temporary = true; | ||
99 | |||
100 | lasc.Store(a2); | ||
101 | |||
102 | AssetBase retreivedA2 = lasc.Get(a2.ID); | ||
103 | Assert.That(retreivedA2.ID, Is.EqualTo(a2.ID)); | ||
104 | Assert.That(retreivedA2.Metadata.ID, Is.EqualTo(a2.Metadata.ID)); | ||
105 | Assert.That(retreivedA2.Data.Length, Is.EqualTo(a2.Data.Length)); | ||
106 | |||
107 | AssetMetadata retrievedA2Metadata = lasc.GetMetadata(a2.ID); | ||
108 | Assert.That(retrievedA2Metadata.ID, Is.EqualTo(a2.ID)); | ||
109 | |||
110 | byte[] retrievedA2Data = lasc.GetData(a2.ID); | ||
111 | Assert.That(retrievedA2Data.Length, Is.EqualTo(a2.Data.Length)); | ||
112 | |||
113 | // TODO: Add cache and check that this does receive a copy of the asset | ||
114 | } | ||
115 | |||
116 | [Test] | ||
117 | public void TestAddLocalAsset() | ||
118 | { | ||
119 | TestHelpers.InMethod(); | ||
120 | // TestHelpers.EnableLogging(); | ||
121 | |||
122 | IConfigSource config = new IniConfigSource(); | ||
123 | config.AddConfig("Modules"); | ||
124 | config.Configs["Modules"].Set("AssetServices", "LocalAssetServicesConnector"); | ||
125 | config.AddConfig("AssetService"); | ||
126 | config.Configs["AssetService"].Set("LocalServiceModule", "OpenSim.Services.AssetService.dll:AssetService"); | ||
127 | config.Configs["AssetService"].Set("StorageProvider", "OpenSim.Tests.Common.dll"); | ||
128 | |||
129 | LocalAssetServicesConnector lasc = new LocalAssetServicesConnector(); | ||
130 | lasc.Initialise(config); | ||
131 | |||
96 | AssetBase a1 = AssetHelpers.CreateNotecardAsset(); | 132 | AssetBase a1 = AssetHelpers.CreateNotecardAsset(); |
97 | a1.Temporary = true; | 133 | a1.Local = true; |
98 | 134 | ||
99 | lasc.Store(a1); | 135 | lasc.Store(a1); |
100 | 136 | ||
@@ -106,7 +142,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.Tests | |||
106 | } | 142 | } |
107 | 143 | ||
108 | [Test] | 144 | [Test] |
109 | public void TestAddLocalAsset() | 145 | public void TestAddTemporaryLocalAsset() |
110 | { | 146 | { |
111 | TestHelpers.InMethod(); | 147 | TestHelpers.InMethod(); |
112 | // TestHelpers.EnableLogging(); | 148 | // TestHelpers.EnableLogging(); |
@@ -121,8 +157,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.Tests | |||
121 | LocalAssetServicesConnector lasc = new LocalAssetServicesConnector(); | 157 | LocalAssetServicesConnector lasc = new LocalAssetServicesConnector(); |
122 | lasc.Initialise(config); | 158 | lasc.Initialise(config); |
123 | 159 | ||
160 | // If it is local, it should not be stored | ||
124 | AssetBase a1 = AssetHelpers.CreateNotecardAsset(); | 161 | AssetBase a1 = AssetHelpers.CreateNotecardAsset(); |
125 | a1.Local = true; | 162 | a1.Local = true; |
163 | a1.Temporary = true; | ||
126 | 164 | ||
127 | lasc.Store(a1); | 165 | lasc.Store(a1); |
128 | 166 | ||