diff options
Changed the inventory service so that is uses exactly one DB plugin, not many. The composition of plugins can be done at the service and connector levels.
This fixes the unit tests that were failing yesterday, but I'm not committing those yet, because I'm seeing 2 of those tests having pass and fail outcomes randomly which suggests that the tests are buggy.
Diffstat (limited to 'OpenSim/Services/InventoryService')
-rw-r--r-- | OpenSim/Services/InventoryService/InventoryService.cs | 102 | ||||
-rw-r--r-- | OpenSim/Services/InventoryService/InventoryServiceBase.cs | 41 |
2 files changed, 28 insertions, 115 deletions
diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index 9dbd591..1190b38 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs | |||
@@ -72,16 +72,10 @@ namespace OpenSim.Services.InventoryService | |||
72 | 72 | ||
73 | userFolders.Add(rootFolder); | 73 | userFolders.Add(rootFolder); |
74 | 74 | ||
75 | foreach (IInventoryDataPlugin plugin in m_plugins) | 75 | IList<InventoryFolderBase> folders = m_Database.getFolderHierarchy(rootFolder.ID); |
76 | { | 76 | userFolders.AddRange(folders); |
77 | IList<InventoryFolderBase> folders = plugin.getFolderHierarchy(rootFolder.ID); | ||
78 | userFolders.AddRange(folders); | ||
79 | } | ||
80 | 77 | ||
81 | // foreach (InventoryFolderBase folder in userFolders) | 78 | // m_log.DebugFormat("[INVENTORY SERVICE]: Got folder {0} {1}", folder.name, folder.folderID); |
82 | // { | ||
83 | // m_log.DebugFormat("[INVENTORY SERVICE]: Got folder {0} {1}", folder.name, folder.folderID); | ||
84 | // } | ||
85 | 79 | ||
86 | return userFolders; | 80 | return userFolders; |
87 | } | 81 | } |
@@ -94,15 +88,12 @@ namespace OpenSim.Services.InventoryService | |||
94 | // See IInventoryServices | 88 | // See IInventoryServices |
95 | public virtual InventoryFolderBase RequestRootFolder(UUID userID) | 89 | public virtual InventoryFolderBase RequestRootFolder(UUID userID) |
96 | { | 90 | { |
97 | // Retrieve the first root folder we get from the list of plugins. | 91 | // Retrieve the first root folder we get from the DB. |
98 | foreach (IInventoryDataPlugin plugin in m_plugins) | 92 | InventoryFolderBase rootFolder = m_Database.getUserRootFolder(userID); |
99 | { | 93 | if (rootFolder != null) |
100 | InventoryFolderBase rootFolder = plugin.getUserRootFolder(userID); | 94 | return rootFolder; |
101 | if (rootFolder != null) | ||
102 | return rootFolder; | ||
103 | } | ||
104 | 95 | ||
105 | // Return nothing if no plugin was able to supply a root folder | 96 | // Return nothing if the plugin was unable to supply a root folder |
106 | return null; | 97 | return null; |
107 | } | 98 | } |
108 | 99 | ||
@@ -246,10 +237,7 @@ namespace OpenSim.Services.InventoryService | |||
246 | public List<InventoryItemBase> GetActiveGestures(UUID userId) | 237 | public List<InventoryItemBase> GetActiveGestures(UUID userId) |
247 | { | 238 | { |
248 | List<InventoryItemBase> activeGestures = new List<InventoryItemBase>(); | 239 | List<InventoryItemBase> activeGestures = new List<InventoryItemBase>(); |
249 | foreach (IInventoryDataPlugin plugin in m_plugins) | 240 | activeGestures.AddRange(m_Database.fetchActiveGestures(userId)); |
250 | { | ||
251 | activeGestures.AddRange(plugin.fetchActiveGestures(userId)); | ||
252 | } | ||
253 | 241 | ||
254 | return activeGestures; | 242 | return activeGestures; |
255 | } | 243 | } |
@@ -262,10 +250,7 @@ namespace OpenSim.Services.InventoryService | |||
262 | { | 250 | { |
263 | List<InventoryFolderBase> inventoryList = new List<InventoryFolderBase>(); | 251 | List<InventoryFolderBase> inventoryList = new List<InventoryFolderBase>(); |
264 | 252 | ||
265 | foreach (IInventoryDataPlugin plugin in m_plugins) | 253 | inventoryList.AddRange(m_Database.getInventoryFolders(parentFolderID)); |
266 | { | ||
267 | inventoryList.AddRange(plugin.getInventoryFolders(parentFolderID)); | ||
268 | } | ||
269 | 254 | ||
270 | return inventoryList; | 255 | return inventoryList; |
271 | } | 256 | } |
@@ -274,10 +259,7 @@ namespace OpenSim.Services.InventoryService | |||
274 | { | 259 | { |
275 | List<InventoryItemBase> itemsList = new List<InventoryItemBase>(); | 260 | List<InventoryItemBase> itemsList = new List<InventoryItemBase>(); |
276 | 261 | ||
277 | foreach (IInventoryDataPlugin plugin in m_plugins) | 262 | itemsList.AddRange(m_Database.getInventoryInFolder(folderID)); |
278 | { | ||
279 | itemsList.AddRange(plugin.getInventoryInFolder(folderID)); | ||
280 | } | ||
281 | 263 | ||
282 | return itemsList; | 264 | return itemsList; |
283 | } | 265 | } |
@@ -290,10 +272,7 @@ namespace OpenSim.Services.InventoryService | |||
290 | m_log.DebugFormat( | 272 | m_log.DebugFormat( |
291 | "[INVENTORY SERVICE]: Adding folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID); | 273 | "[INVENTORY SERVICE]: Adding folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID); |
292 | 274 | ||
293 | foreach (IInventoryDataPlugin plugin in m_plugins) | 275 | m_Database.addInventoryFolder(folder); |
294 | { | ||
295 | plugin.addInventoryFolder(folder); | ||
296 | } | ||
297 | 276 | ||
298 | // FIXME: Should return false on failure | 277 | // FIXME: Should return false on failure |
299 | return true; | 278 | return true; |
@@ -305,10 +284,7 @@ namespace OpenSim.Services.InventoryService | |||
305 | m_log.DebugFormat( | 284 | m_log.DebugFormat( |
306 | "[INVENTORY SERVICE]: Updating folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID); | 285 | "[INVENTORY SERVICE]: Updating folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID); |
307 | 286 | ||
308 | foreach (IInventoryDataPlugin plugin in m_plugins) | 287 | m_Database.updateInventoryFolder(folder); |
309 | { | ||
310 | plugin.updateInventoryFolder(folder); | ||
311 | } | ||
312 | 288 | ||
313 | // FIXME: Should return false on failure | 289 | // FIXME: Should return false on failure |
314 | return true; | 290 | return true; |
@@ -320,10 +296,7 @@ namespace OpenSim.Services.InventoryService | |||
320 | m_log.DebugFormat( | 296 | m_log.DebugFormat( |
321 | "[INVENTORY SERVICE]: Moving folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID); | 297 | "[INVENTORY SERVICE]: Moving folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID); |
322 | 298 | ||
323 | foreach (IInventoryDataPlugin plugin in m_plugins) | 299 | m_Database.moveInventoryFolder(folder); |
324 | { | ||
325 | plugin.moveInventoryFolder(folder); | ||
326 | } | ||
327 | 300 | ||
328 | // FIXME: Should return false on failure | 301 | // FIXME: Should return false on failure |
329 | return true; | 302 | return true; |
@@ -335,10 +308,7 @@ namespace OpenSim.Services.InventoryService | |||
335 | m_log.DebugFormat( | 308 | m_log.DebugFormat( |
336 | "[INVENTORY SERVICE]: Adding item {0} {1} to folder {2}", item.Name, item.ID, item.Folder); | 309 | "[INVENTORY SERVICE]: Adding item {0} {1} to folder {2}", item.Name, item.ID, item.Folder); |
337 | 310 | ||
338 | foreach (IInventoryDataPlugin plugin in m_plugins) | 311 | m_Database.addInventoryItem(item); |
339 | { | ||
340 | plugin.addInventoryItem(item); | ||
341 | } | ||
342 | 312 | ||
343 | // FIXME: Should return false on failure | 313 | // FIXME: Should return false on failure |
344 | return true; | 314 | return true; |
@@ -350,10 +320,7 @@ namespace OpenSim.Services.InventoryService | |||
350 | m_log.InfoFormat( | 320 | m_log.InfoFormat( |
351 | "[INVENTORY SERVICE]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder); | 321 | "[INVENTORY SERVICE]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder); |
352 | 322 | ||
353 | foreach (IInventoryDataPlugin plugin in m_plugins) | 323 | m_Database.updateInventoryItem(item); |
354 | { | ||
355 | plugin.updateInventoryItem(item); | ||
356 | } | ||
357 | 324 | ||
358 | // FIXME: Should return false on failure | 325 | // FIXME: Should return false on failure |
359 | return true; | 326 | return true; |
@@ -365,10 +332,7 @@ namespace OpenSim.Services.InventoryService | |||
365 | m_log.InfoFormat( | 332 | m_log.InfoFormat( |
366 | "[INVENTORY SERVICE]: Deleting item {0} {1} from folder {2}", item.Name, item.ID, item.Folder); | 333 | "[INVENTORY SERVICE]: Deleting item {0} {1} from folder {2}", item.Name, item.ID, item.Folder); |
367 | 334 | ||
368 | foreach (IInventoryDataPlugin plugin in m_plugins) | 335 | m_Database.deleteInventoryItem(item.ID); |
369 | { | ||
370 | plugin.deleteInventoryItem(item.ID); | ||
371 | } | ||
372 | 336 | ||
373 | // FIXME: Should return false on failure | 337 | // FIXME: Should return false on failure |
374 | return true; | 338 | return true; |
@@ -376,24 +340,18 @@ namespace OpenSim.Services.InventoryService | |||
376 | 340 | ||
377 | public virtual InventoryItemBase QueryItem(InventoryItemBase item) | 341 | public virtual InventoryItemBase QueryItem(InventoryItemBase item) |
378 | { | 342 | { |
379 | foreach (IInventoryDataPlugin plugin in m_plugins) | 343 | InventoryItemBase result = m_Database.queryInventoryItem(item.ID); |
380 | { | 344 | if (result != null) |
381 | InventoryItemBase result = plugin.queryInventoryItem(item.ID); | 345 | return result; |
382 | if (result != null) | ||
383 | return result; | ||
384 | } | ||
385 | 346 | ||
386 | return null; | 347 | return null; |
387 | } | 348 | } |
388 | 349 | ||
389 | public virtual InventoryFolderBase QueryFolder(InventoryFolderBase item) | 350 | public virtual InventoryFolderBase QueryFolder(InventoryFolderBase item) |
390 | { | 351 | { |
391 | foreach (IInventoryDataPlugin plugin in m_plugins) | 352 | InventoryFolderBase result = m_Database.queryInventoryFolder(item.ID); |
392 | { | 353 | if (result != null) |
393 | InventoryFolderBase result = plugin.queryInventoryFolder(item.ID); | 354 | return result; |
394 | if (result != null) | ||
395 | return result; | ||
396 | } | ||
397 | 355 | ||
398 | return null; | 356 | return null; |
399 | } | 357 | } |
@@ -416,10 +374,7 @@ namespace OpenSim.Services.InventoryService | |||
416 | { | 374 | { |
417 | // m_log.DebugFormat("[INVENTORY SERVICE]: Deleting folder {0} {1}", subFolder.Name, subFolder.ID); | 375 | // m_log.DebugFormat("[INVENTORY SERVICE]: Deleting folder {0} {1}", subFolder.Name, subFolder.ID); |
418 | 376 | ||
419 | foreach (IInventoryDataPlugin plugin in m_plugins) | 377 | m_Database.deleteInventoryFolder(subFolder.ID); |
420 | { | ||
421 | plugin.deleteInventoryFolder(subFolder.ID); | ||
422 | } | ||
423 | } | 378 | } |
424 | 379 | ||
425 | List<InventoryItemBase> items = GetFolderItems(folder.ID); | 380 | List<InventoryItemBase> items = GetFolderItems(folder.ID); |
@@ -443,12 +398,9 @@ namespace OpenSim.Services.InventoryService | |||
443 | 398 | ||
444 | public InventoryItemBase GetInventoryItem(UUID itemID) | 399 | public InventoryItemBase GetInventoryItem(UUID itemID) |
445 | { | 400 | { |
446 | foreach (IInventoryDataPlugin plugin in m_plugins) | 401 | InventoryItemBase item = m_Database.getInventoryItem(itemID); |
447 | { | 402 | if (item != null) |
448 | InventoryItemBase item = plugin.getInventoryItem(itemID); | 403 | return item; |
449 | if (item != null) | ||
450 | return item; | ||
451 | } | ||
452 | 404 | ||
453 | return null; | 405 | return null; |
454 | } | 406 | } |
diff --git a/OpenSim/Services/InventoryService/InventoryServiceBase.cs b/OpenSim/Services/InventoryService/InventoryServiceBase.cs index 4526c34..456e455 100644 --- a/OpenSim/Services/InventoryService/InventoryServiceBase.cs +++ b/OpenSim/Services/InventoryService/InventoryServiceBase.cs | |||
@@ -40,8 +40,6 @@ namespace OpenSim.Services.InventoryService | |||
40 | { | 40 | { |
41 | protected IInventoryDataPlugin m_Database = null; | 41 | protected IInventoryDataPlugin m_Database = null; |
42 | 42 | ||
43 | protected List<IInventoryDataPlugin> m_plugins = new List<IInventoryDataPlugin>(); | ||
44 | |||
45 | public InventoryServiceBase(IConfigSource config) : base(config) | 43 | public InventoryServiceBase(IConfigSource config) : base(config) |
46 | { | 44 | { |
47 | string dllName = String.Empty; | 45 | string dllName = String.Empty; |
@@ -56,8 +54,6 @@ namespace OpenSim.Services.InventoryService | |||
56 | dllName = dbConfig.GetString("StorageProvider", String.Empty); | 54 | dllName = dbConfig.GetString("StorageProvider", String.Empty); |
57 | connString = dbConfig.GetString("ConnectionString", String.Empty); | 55 | connString = dbConfig.GetString("ConnectionString", String.Empty); |
58 | } | 56 | } |
59 | else | ||
60 | Console.WriteLine("------ dbConfig = null!"); | ||
61 | 57 | ||
62 | // | 58 | // |
63 | // Try reading the more specific [InventoryService] section, if it exists | 59 | // Try reading the more specific [InventoryService] section, if it exists |
@@ -79,43 +75,8 @@ namespace OpenSim.Services.InventoryService | |||
79 | if (m_Database == null) | 75 | if (m_Database == null) |
80 | throw new Exception("Could not find a storage interface in the given module"); | 76 | throw new Exception("Could not find a storage interface in the given module"); |
81 | 77 | ||
82 | //m_Database.Initialise(connString); | 78 | m_Database.Initialise(connString); |
83 | List<IInventoryDataPlugin> plugins | ||
84 | = DataPluginFactory.LoadDataPlugins<IInventoryDataPlugin>(dllName, connString); | ||
85 | |||
86 | foreach (IInventoryDataPlugin plugin in plugins) | ||
87 | AddPlugin(plugin); | ||
88 | |||
89 | } | ||
90 | |||
91 | #region Plugin methods | ||
92 | |||
93 | /// <summary> | ||
94 | /// Add a new inventory data plugin - plugins will be requested in the order they were added. | ||
95 | /// </summary> | ||
96 | /// <param name="plugin">The plugin that will provide data</param> | ||
97 | public void AddPlugin(IInventoryDataPlugin plugin) | ||
98 | { | ||
99 | m_plugins.Add(plugin); | ||
100 | } | ||
101 | |||
102 | /// <summary> | ||
103 | /// Adds a list of inventory data plugins, as described by `provider' | ||
104 | /// and `connect', to `m_plugins'. | ||
105 | /// </summary> | ||
106 | /// <param name="provider"> | ||
107 | /// The filename of the inventory server plugin DLL. | ||
108 | /// </param> | ||
109 | /// <param name="connect"> | ||
110 | /// The connection string for the storage backend. | ||
111 | /// </param> | ||
112 | public void AddPlugins(string provider, string connect) | ||
113 | { | ||
114 | m_plugins.AddRange(DataPluginFactory.LoadDataPlugins<IInventoryDataPlugin>(provider, connect)); | ||
115 | } | 79 | } |
116 | 80 | ||
117 | #endregion | ||
118 | |||
119 | |||
120 | } | 81 | } |
121 | } | 82 | } |