aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authordiva2009-06-11 13:46:44 +0000
committerdiva2009-06-11 13:46:44 +0000
commit57c4b699169017e9552309c53f520b318cc8a1c0 (patch)
tree0cd70a71eb476753cc219cb43a766c1909556fea
parentInterServiceInventoryService references *almost* completely removed from the ... (diff)
downloadopensim-SC_OLD-57c4b699169017e9552309c53f520b318cc8a1c0.zip
opensim-SC_OLD-57c4b699169017e9552309c53f520b318cc8a1c0.tar.gz
opensim-SC_OLD-57c4b699169017e9552309c53f520b318cc8a1c0.tar.bz2
opensim-SC_OLD-57c4b699169017e9552309c53f520b318cc8a1c0.tar.xz
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.
-rw-r--r--OpenSim/Services/InventoryService/InventoryService.cs102
-rw-r--r--OpenSim/Services/InventoryService/InventoryServiceBase.cs41
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}