From 5cfc468d959f1fcfa1fa8121154a70c6430df083 Mon Sep 17 00:00:00 2001 From: MW Date: Sat, 28 Jun 2008 17:52:06 +0000 Subject: more work on the support for multiple inventory servers. The Login service should now read/create new inventory on the inventory server that is set in a users profile. Also added "Add-InventoryHost" console command to add a support for a new server to a region. So it would be good if someone could test this. Set up the grid as normal, but then also run extra inventory server on a different computer (well actually it just has to be on a different network hostname, so one using "http://localhost:8004" and one using "http://127.0.0.1:8005" should work) then you need to manually edit the user profile database to set the new servers url in a user's "userInventoryURI" field. Then on a region server, use the Add-InventoryHost to add the new server url (always include the full url, including http, but don't add a final /) Login with that account and see if the inventory works. Of course these needs to be made more user friendly. --- OpenSim/Framework/Communications/LoginService.cs | 6 +++--- OpenSim/Grid/UserServer/UserLoginService.cs | 14 ++++++++++---- OpenSim/Region/Application/OpenSim.cs | 7 +++++++ OpenSim/Region/Communications/Local/LocalLoginService.cs | 2 +- 4 files changed, 21 insertions(+), 8 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs index 08b071f..8fcb4f5 100644 --- a/OpenSim/Framework/Communications/LoginService.cs +++ b/OpenSim/Framework/Communications/LoginService.cs @@ -94,7 +94,7 @@ namespace OpenSim.Framework.Communications /// /// /// This will be thrown if there is a problem with the inventory service - protected abstract InventoryData GetInventorySkeleton(LLUUID userID); + protected abstract InventoryData GetInventorySkeleton(LLUUID userID, string inventoryServerUrl); /// /// Called when we receive the client's initial XMLRPC login_to_simulator request message @@ -230,7 +230,7 @@ namespace OpenSim.Framework.Communications try { - inventData = GetInventorySkeleton(agentID); + inventData = GetInventorySkeleton(agentID, userProfile.UserInventoryURI); } catch (Exception e) { @@ -386,7 +386,7 @@ namespace OpenSim.Framework.Communications LLUUID agentID = userProfile.ID; // Inventory Library Section - InventoryData inventData = GetInventorySkeleton(agentID); + InventoryData inventData = GetInventorySkeleton(agentID, userProfile.UserInventoryURI); ArrayList AgentInventoryArray = inventData.InventoryArray; Hashtable InventoryRootHash = new Hashtable(); diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs index 165700c..a4dce5e 100644 --- a/OpenSim/Grid/UserServer/UserLoginService.cs +++ b/OpenSim/Grid/UserServer/UserLoginService.cs @@ -419,15 +419,21 @@ namespace OpenSim.Grid.UserServer } // See LoginService - protected override InventoryData GetInventorySkeleton(LLUUID userID) + protected override InventoryData GetInventorySkeleton(LLUUID userID, string serverUrl) { + string invUrl = m_config.InventoryUrl; + if (serverUrl != String.Empty) + { + invUrl = serverUrl; + } + m_log.DebugFormat( "[LOGIN]: Contacting inventory service at {0} for inventory skeleton of user {1}", m_config.InventoryUrl, userID); List folders = SynchronousRestObjectPoster.BeginPostObject>( - "POST", m_config.InventoryUrl + "RootFolders/", userID.UUID); + "POST", invUrl + "RootFolders/", userID.UUID); if (null == folders || folders.Count == 0) { @@ -440,7 +446,7 @@ namespace OpenSim.Grid.UserServer // exist. bool created = SynchronousRestObjectPoster.BeginPostObject( - "POST", m_config.InventoryUrl + "CreateInventory/", userID.UUID); + "POST", invUrl + "CreateInventory/", userID.UUID); if (!created) { @@ -456,7 +462,7 @@ namespace OpenSim.Grid.UserServer } folders = SynchronousRestObjectPoster.BeginPostObject>( - "POST", m_config.InventoryUrl + "RootFolders/", userID.UUID); + "POST", invUrl + "RootFolders/", userID.UUID); } if (folders != null && folders.Count > 0) diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 8b42e2e..60e00a2 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -602,6 +602,13 @@ namespace OpenSim } break; + + case "Add-InventoryHost": + if (cmdparams.Length > 0) + { + m_commsManager.AddInventoryService(cmdparams[0]); + } + break; default: string[] tmpPluginArgs = new string[cmdparams.Length + 1]; cmdparams.CopyTo(tmpPluginArgs, 1); diff --git a/OpenSim/Region/Communications/Local/LocalLoginService.cs b/OpenSim/Region/Communications/Local/LocalLoginService.cs index 5f4558d..30a639a 100644 --- a/OpenSim/Region/Communications/Local/LocalLoginService.cs +++ b/OpenSim/Region/Communications/Local/LocalLoginService.cs @@ -258,7 +258,7 @@ namespace OpenSim.Region.Communications.Local } // See LoginService - protected override InventoryData GetInventorySkeleton(LLUUID userID) + protected override InventoryData GetInventorySkeleton(LLUUID userID, string serverUrl) { List folders = m_Parent.InventoryService.GetInventorySkeleton(userID); -- cgit v1.1