diff options
author | onefang | 2019-05-19 21:24:15 +1000 |
---|---|---|
committer | onefang | 2019-05-19 21:24:15 +1000 |
commit | 5e4d6cab00cb29cd088ab7b62ab13aff103b64cb (patch) | |
tree | a9fbc62df9eb2d1d9ba2698d8552eae71eca20d8 /OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory | |
parent | Add a build script. (diff) | |
download | opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.zip opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.tar.gz opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.tar.bz2 opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.tar.xz |
Dump OpenSim 0.9.0.1 into it's own branch.
Diffstat (limited to 'OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory')
4 files changed, 64 insertions, 53 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index 48f228a..7a4f981 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs | |||
@@ -86,7 +86,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
86 | } | 86 | } |
87 | } | 87 | } |
88 | 88 | ||
89 | public Type ReplaceableInterface | 89 | public Type ReplaceableInterface |
90 | { | 90 | { |
91 | get { return null; } | 91 | get { return null; } |
92 | } | 92 | } |
@@ -203,21 +203,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
203 | 203 | ||
204 | void OnClientClosed(UUID clientID, Scene scene) | 204 | void OnClientClosed(UUID clientID, Scene scene) |
205 | { | 205 | { |
206 | if (m_InventoryURLs.ContainsKey(clientID)) // if it's in cache | 206 | ScenePresence sp = null; |
207 | foreach (Scene s in m_Scenes) | ||
207 | { | 208 | { |
208 | ScenePresence sp = null; | 209 | s.TryGetScenePresence(clientID, out sp); |
209 | foreach (Scene s in m_Scenes) | 210 | if ((sp != null) && !sp.IsChildAgent && (s != scene)) |
210 | { | 211 | { |
211 | s.TryGetScenePresence(clientID, out sp); | 212 | m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, but user {1} still in sim. Keeping inventoryURL in cache", |
212 | if ((sp != null) && !sp.IsChildAgent && (s != scene)) | ||
213 | { | ||
214 | m_log.DebugFormat("[INVENTORY CACHE]: OnClientClosed in {0}, but user {1} still in sim. Keeping inventoryURL in cache", | ||
215 | scene.RegionInfo.RegionName, clientID); | 213 | scene.RegionInfo.RegionName, clientID); |
216 | return; | 214 | return; |
217 | } | ||
218 | } | 215 | } |
219 | DropInventoryServiceURL(clientID); | ||
220 | } | 216 | } |
217 | |||
218 | if (m_InventoryURLs.ContainsKey(clientID)) // if it's in cache | ||
219 | DropInventoryServiceURL(clientID); | ||
220 | |||
221 | m_Cache.RemoveAll(clientID); | ||
221 | } | 222 | } |
222 | 223 | ||
223 | /// <summary> | 224 | /// <summary> |
@@ -249,7 +250,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
249 | if (inventoryURL != null && inventoryURL != string.Empty) | 250 | if (inventoryURL != null && inventoryURL != string.Empty) |
250 | { | 251 | { |
251 | inventoryURL = inventoryURL.Trim(new char[] { '/' }); | 252 | inventoryURL = inventoryURL.Trim(new char[] { '/' }); |
252 | m_InventoryURLs[userID] = inventoryURL; | 253 | lock (m_InventoryURLs) |
254 | m_InventoryURLs[userID] = inventoryURL; | ||
253 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Added {0} to the cache of inventory URLs", inventoryURL); | 255 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Added {0} to the cache of inventory URLs", inventoryURL); |
254 | return; | 256 | return; |
255 | } | 257 | } |
@@ -267,38 +269,45 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
267 | if (!string.IsNullOrEmpty(inventoryURL)) | 269 | if (!string.IsNullOrEmpty(inventoryURL)) |
268 | { | 270 | { |
269 | inventoryURL = inventoryURL.Trim(new char[] { '/' }); | 271 | inventoryURL = inventoryURL.Trim(new char[] { '/' }); |
270 | m_InventoryURLs.Add(userID, inventoryURL); | 272 | lock (m_InventoryURLs) |
273 | m_InventoryURLs[userID] = inventoryURL; | ||
271 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Added {0} to the cache of inventory URLs", inventoryURL); | 274 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Added {0} to the cache of inventory URLs", inventoryURL); |
272 | } | 275 | } |
273 | |||
274 | } | 276 | } |
275 | |||
276 | } | 277 | } |
277 | } | 278 | } |
278 | 279 | ||
279 | private void DropInventoryServiceURL(UUID userID) | 280 | private void DropInventoryServiceURL(UUID userID) |
280 | { | 281 | { |
281 | lock (m_InventoryURLs) | 282 | lock (m_InventoryURLs) |
283 | { | ||
282 | if (m_InventoryURLs.ContainsKey(userID)) | 284 | if (m_InventoryURLs.ContainsKey(userID)) |
283 | { | 285 | { |
284 | string url = m_InventoryURLs[userID]; | 286 | string url = m_InventoryURLs[userID]; |
285 | m_InventoryURLs.Remove(userID); | 287 | m_InventoryURLs.Remove(userID); |
286 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Removed {0} from the cache of inventory URLs", url); | 288 | m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Removed {0} from the cache of inventory URLs", url); |
287 | } | 289 | } |
290 | } | ||
288 | } | 291 | } |
289 | 292 | ||
290 | public string GetInventoryServiceURL(UUID userID) | 293 | public string GetInventoryServiceURL(UUID userID) |
291 | { | 294 | { |
292 | if (m_InventoryURLs.ContainsKey(userID)) | 295 | lock (m_InventoryURLs) |
293 | return m_InventoryURLs[userID]; | 296 | { |
297 | if (m_InventoryURLs.ContainsKey(userID)) | ||
298 | return m_InventoryURLs[userID]; | ||
299 | } | ||
294 | 300 | ||
295 | CacheInventoryServiceURL(userID); | 301 | CacheInventoryServiceURL(userID); |
296 | 302 | ||
297 | if (m_InventoryURLs.ContainsKey(userID)) | 303 | lock (m_InventoryURLs) |
298 | return m_InventoryURLs[userID]; | 304 | { |
305 | if (m_InventoryURLs.ContainsKey(userID)) | ||
306 | return m_InventoryURLs[userID]; | ||
307 | } | ||
299 | 308 | ||
300 | return null; //it means that the methods should forward to local grid's inventory | 309 | return null; //it means that the methods should forward to local grid's inventory |
301 | 310 | ||
302 | } | 311 | } |
303 | #endregion | 312 | #endregion |
304 | 313 | ||
@@ -598,21 +607,19 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
598 | return connector.DeleteItems(ownerID, itemIDs); | 607 | return connector.DeleteItems(ownerID, itemIDs); |
599 | } | 608 | } |
600 | 609 | ||
601 | public InventoryItemBase GetItem(InventoryItemBase item) | 610 | public InventoryItemBase GetItem(UUID principalID, UUID itemID) |
602 | { | 611 | { |
603 | if (item == null) | ||
604 | return null; | ||
605 | //m_log.Debug("[HG INVENTORY CONNECTOR]: GetItem " + item.ID); | 612 | //m_log.Debug("[HG INVENTORY CONNECTOR]: GetItem " + item.ID); |
606 | 613 | ||
607 | string invURL = GetInventoryServiceURL(item.Owner); | 614 | string invURL = GetInventoryServiceURL(principalID); |
608 | 615 | ||
609 | if (invURL == null) // not there, forward to local inventory connector to resolve | 616 | if (invURL == null) // not there, forward to local inventory connector to resolve |
610 | lock (m_Lock) | 617 | lock (m_Lock) |
611 | return m_LocalGridInventoryService.GetItem(item); | 618 | return m_LocalGridInventoryService.GetItem(principalID, itemID); |
612 | 619 | ||
613 | IInventoryService connector = GetConnector(invURL); | 620 | IInventoryService connector = GetConnector(invURL); |
614 | 621 | ||
615 | return connector.GetItem(item); | 622 | return connector.GetItem(principalID, itemID); |
616 | } | 623 | } |
617 | 624 | ||
618 | public InventoryItemBase[] GetMultipleItems(UUID userID, UUID[] itemIDs) | 625 | public InventoryItemBase[] GetMultipleItems(UUID userID, UUID[] itemIDs) |
@@ -632,22 +639,19 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
632 | return connector.GetMultipleItems(userID, itemIDs); | 639 | return connector.GetMultipleItems(userID, itemIDs); |
633 | } | 640 | } |
634 | 641 | ||
635 | public InventoryFolderBase GetFolder(InventoryFolderBase folder) | 642 | public InventoryFolderBase GetFolder(UUID principalID, UUID folderID) |
636 | { | 643 | { |
637 | if (folder == null) | ||
638 | return null; | ||
639 | |||
640 | //m_log.Debug("[HG INVENTORY CONNECTOR]: GetFolder " + folder.ID); | 644 | //m_log.Debug("[HG INVENTORY CONNECTOR]: GetFolder " + folder.ID); |
641 | 645 | ||
642 | string invURL = GetInventoryServiceURL(folder.Owner); | 646 | string invURL = GetInventoryServiceURL(principalID); |
643 | 647 | ||
644 | if (invURL == null) // not there, forward to local inventory connector to resolve | 648 | if (invURL == null) // not there, forward to local inventory connector to resolve |
645 | lock (m_Lock) | 649 | lock (m_Lock) |
646 | return m_LocalGridInventoryService.GetFolder(folder); | 650 | return m_LocalGridInventoryService.GetFolder(principalID, folderID); |
647 | 651 | ||
648 | IInventoryService connector = GetConnector(invURL); | 652 | IInventoryService connector = GetConnector(invURL); |
649 | 653 | ||
650 | return connector.GetFolder(folder); | 654 | return connector.GetFolder(principalID, folderID); |
651 | } | 655 | } |
652 | 656 | ||
653 | public bool HasInventoryForUser(UUID userID) | 657 | public bool HasInventoryForUser(UUID userID) |
@@ -710,4 +714,4 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
710 | return connector; | 714 | return connector; |
711 | } | 715 | } |
712 | } | 716 | } |
713 | } \ No newline at end of file | 717 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs index 3195e6b..f7ef2ea 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs | |||
@@ -38,12 +38,23 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
38 | /// </summary> | 38 | /// </summary> |
39 | public class InventoryCache | 39 | public class InventoryCache |
40 | { | 40 | { |
41 | private const double CACHE_EXPIRATION_SECONDS = 3600.0; // 1 hour | 41 | private const double CACHE_EXPIRATION_SECONDS = 60.0; // 1 minute |
42 | 42 | ||
43 | private static ExpiringCache<UUID, InventoryFolderBase> m_RootFolders = new ExpiringCache<UUID, InventoryFolderBase>(); | 43 | private static ExpiringCache<UUID, InventoryFolderBase> m_RootFolders = new ExpiringCache<UUID, InventoryFolderBase>(); |
44 | private static ExpiringCache<UUID, Dictionary<FolderType, InventoryFolderBase>> m_FolderTypes = new ExpiringCache<UUID, Dictionary<FolderType, InventoryFolderBase>>(); | 44 | private static ExpiringCache<UUID, Dictionary<FolderType, InventoryFolderBase>> m_FolderTypes = new ExpiringCache<UUID, Dictionary<FolderType, InventoryFolderBase>>(); |
45 | private static ExpiringCache<UUID, InventoryCollection> m_Inventories = new ExpiringCache<UUID, InventoryCollection>(); | 45 | private static ExpiringCache<UUID, InventoryCollection> m_Inventories = new ExpiringCache<UUID, InventoryCollection>(); |
46 | 46 | ||
47 | |||
48 | public void RemoveAll(UUID userID) | ||
49 | { | ||
50 | if(m_RootFolders.Contains(userID)) | ||
51 | m_RootFolders.Remove(userID); | ||
52 | if(m_FolderTypes.Contains(userID)) | ||
53 | m_FolderTypes.Remove(userID); | ||
54 | if(m_Inventories.Contains(userID)) | ||
55 | m_Inventories.Remove(userID); | ||
56 | } | ||
57 | |||
47 | public void Cache(UUID userID, InventoryFolderBase root) | 58 | public void Cache(UUID userID, InventoryFolderBase root) |
48 | { | 59 | { |
49 | m_RootFolders.AddOrUpdate(userID, root, CACHE_EXPIRATION_SECONDS); | 60 | m_RootFolders.AddOrUpdate(userID, root, CACHE_EXPIRATION_SECONDS); |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index 20d4e02..fa36b66 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs | |||
@@ -72,7 +72,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
72 | 72 | ||
73 | private bool m_Enabled = false; | 73 | private bool m_Enabled = false; |
74 | 74 | ||
75 | public Type ReplaceableInterface | 75 | public Type ReplaceableInterface |
76 | { | 76 | { |
77 | get { return null; } | 77 | get { return null; } |
78 | } | 78 | } |
@@ -134,7 +134,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
134 | { | 134 | { |
135 | if (!m_Enabled) | 135 | if (!m_Enabled) |
136 | return; | 136 | return; |
137 | 137 | ||
138 | scene.RegisterModuleInterface<IInventoryService>(this); | 138 | scene.RegisterModuleInterface<IInventoryService>(this); |
139 | 139 | ||
140 | if (Scene == null) | 140 | if (Scene == null) |
@@ -261,9 +261,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
261 | public bool AddItem(InventoryItemBase item) | 261 | public bool AddItem(InventoryItemBase item) |
262 | { | 262 | { |
263 | // m_log.DebugFormat( | 263 | // m_log.DebugFormat( |
264 | // "[LOCAL INVENTORY SERVICES CONNECTOR]: Adding inventory item {0} to user {1} folder {2}", | 264 | // "[LOCAL INVENTORY SERVICES CONNECTOR]: Adding inventory item {0} to user {1} folder {2}", |
265 | // item.Name, item.Owner, item.Folder); | 265 | // item.Name, item.Owner, item.Folder); |
266 | 266 | ||
267 | return m_InventoryService.AddItem(item); | 267 | return m_InventoryService.AddItem(item); |
268 | } | 268 | } |
269 | 269 | ||
@@ -292,13 +292,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
292 | return m_InventoryService.DeleteItems(ownerID, itemIDs); | 292 | return m_InventoryService.DeleteItems(ownerID, itemIDs); |
293 | } | 293 | } |
294 | 294 | ||
295 | public InventoryItemBase GetItem(InventoryItemBase item) | 295 | public InventoryItemBase GetItem(UUID principalID, UUID itemID) |
296 | { | 296 | { |
297 | // m_log.DebugFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Requesting inventory item {0}", item.ID); | 297 | // m_log.DebugFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Requesting inventory item {0}", item.ID); |
298 | 298 | ||
299 | // UUID requestedItemId = item.ID; | 299 | // UUID requestedItemId = item.ID; |
300 | 300 | ||
301 | item = m_InventoryService.GetItem(item); | 301 | InventoryItemBase item = m_InventoryService.GetItem(principalID, itemID); |
302 | 302 | ||
303 | // if (null == item) | 303 | // if (null == item) |
304 | // m_log.ErrorFormat( | 304 | // m_log.ErrorFormat( |
@@ -312,9 +312,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
312 | return m_InventoryService.GetMultipleItems(userID, itemIDs); | 312 | return m_InventoryService.GetMultipleItems(userID, itemIDs); |
313 | } | 313 | } |
314 | 314 | ||
315 | public InventoryFolderBase GetFolder(InventoryFolderBase folder) | 315 | public InventoryFolderBase GetFolder(UUID principalID, UUID folderID) |
316 | { | 316 | { |
317 | return m_InventoryService.GetFolder(folder); | 317 | return m_InventoryService.GetFolder(principalID, folderID); |
318 | } | 318 | } |
319 | 319 | ||
320 | /// <summary> | 320 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs index 978b9d9..d8ae2c4 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs | |||
@@ -74,7 +74,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
74 | } | 74 | } |
75 | } | 75 | } |
76 | 76 | ||
77 | public Type ReplaceableInterface | 77 | public Type ReplaceableInterface |
78 | { | 78 | { |
79 | get { return null; } | 79 | get { return null; } |
80 | } | 80 | } |
@@ -292,15 +292,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
292 | return m_RemoteConnector.DeleteItems(ownerID, itemIDs); | 292 | return m_RemoteConnector.DeleteItems(ownerID, itemIDs); |
293 | } | 293 | } |
294 | 294 | ||
295 | public InventoryItemBase GetItem(InventoryItemBase item) | 295 | public InventoryItemBase GetItem(UUID userID, UUID itemID) |
296 | { | 296 | { |
297 | //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetItem {0}", item.ID); | 297 | //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetItem {0}", item.ID); |
298 | if (item == null) | ||
299 | return null; | ||
300 | 298 | ||
301 | if (m_RemoteConnector == null) | 299 | if (m_RemoteConnector == null) |
302 | m_log.DebugFormat("[XINVENTORY CONNECTOR]: connector stub is null!!!"); | 300 | m_log.DebugFormat("[XINVENTORY CONNECTOR]: connector stub is null!!!"); |
303 | return m_RemoteConnector.GetItem(item); | 301 | return m_RemoteConnector.GetItem(userID, itemID); |
304 | } | 302 | } |
305 | 303 | ||
306 | public InventoryItemBase[] GetMultipleItems(UUID userID, UUID[] itemIDs) | 304 | public InventoryItemBase[] GetMultipleItems(UUID userID, UUID[] itemIDs) |
@@ -311,13 +309,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
311 | return m_RemoteConnector.GetMultipleItems(userID, itemIDs); | 309 | return m_RemoteConnector.GetMultipleItems(userID, itemIDs); |
312 | } | 310 | } |
313 | 311 | ||
314 | public InventoryFolderBase GetFolder(InventoryFolderBase folder) | 312 | public InventoryFolderBase GetFolder(UUID userID, UUID folderID) |
315 | { | 313 | { |
316 | //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetFolder {0}", folder.ID); | 314 | //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetFolder {0}", folder.ID); |
317 | if (folder == null) | ||
318 | return null; | ||
319 | 315 | ||
320 | return m_RemoteConnector.GetFolder(folder); | 316 | return m_RemoteConnector.GetFolder(userID, folderID); |
321 | } | 317 | } |
322 | 318 | ||
323 | public bool HasInventoryForUser(UUID userID) | 319 | public bool HasInventoryForUser(UUID userID) |
@@ -337,4 +333,4 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
337 | 333 | ||
338 | #endregion | 334 | #endregion |
339 | } | 335 | } |
340 | } \ No newline at end of file | 336 | } |